2013-07-27 45 views
2

我正在使用Tkinter編寫python的GUI編程。
我用下面的代碼創建我的Tkinter根窗口4幀(幀1,式2,幀3和窗口4):如何通過For Loop在python中創建多個框架?

import tkinter as tki 

class App(object): 

    def __init__(self): 
     self.root = tki.Tk()   
     self.root.wm_title("Play With python") 
     for r in range(8): 
      self.root.rowconfigure(r, weight=1) 
     for c in range(2): 
      self.root.columnconfigure(c, weight=1) 
    # Create Frames 
     Frame1 = tki.Frame(self.root, borderwidth=1, bg = 'blue') 
     Frame1.grid(row = 0, column = 0, rowspan = 2, columnspan = 2, sticky = 'w, e, n, s') 

     Frame2 = tki.Frame(self.root, borderwidth=1, bg = 'blue') 
     Frame2.grid(row = 2, column = 0, rowspan = 2, columnspan = 2, sticky = 'w, e, n, s') 

     Frame3 = tki.Frame(self.root, borderwidth=1, bg = 'blue') 
     Frame3.grid(row = 4, column = 0, rowspan = 2, columnspan = 2, sticky = 'w, e, n, s') 

     Frame4 = tki.Frame(self.root, borderwidth=1, bg = 'blue') 
     Frame4.grid(row = 6, column = 0, rowspan = 2, columnspan = 2, sticky = 'w, e, n, s') 

app = App() 
app.root.mainloop() 

同樣的事情我想用一個for循環,使盡我代碼可讀性在我真正的代碼框架是圍繞12

我想對於相同的輸出下面的代碼:

import tkinter as tki 

class App(object): 

    def __init__(self): 
     self.root = tki.Tk()   
     self.root.wm_title("Play With python") 
     for r in range(8): 
      self.root.rowconfigure(r, weight=1) 
     for c in range(2): 
      self.root.columnconfigure(c, weight=1) 
    # Create Frames 
     j = 0 
     for i in range(1,5): 
      Framei = tki.Frame(self.root, borderwidth=1, bg = 'blue') 
      Framei.grid(row = j, column = 0, rowspan = 2, columnspan = 2, sticky = 'w, e, n, s') 
      j = j + 2 
app = App() 
app.root.mainloop() 

問題:

正如我看到的問題,此代碼創建4幀,但與Framei(而不是Frame1,Frame2,Frame3和Frame4)具有相同的名稱參考。 但我想要4個不同名稱的框架(Frame1,Frame2,Frame3和Frame4)。

我知道我的問題與運行時的變量創建非常相關,但因爲我第一次應用它所以面臨問題。

我使用的Python版本是3.0.1。
請幫助...

+0

您應該將答案標記爲正確(點擊勾號)。 –

回答

3

你應該把Frame實例在列表中,像這樣:

import tkinter as tki 

class App(object): 

    def __init__(self): 
     self.root = tki.Tk() 
     self.root.wm_title("Play With python") 
     for r in range(8): 
      self.root.rowconfigure(r, weight=1) 
     for c in range(2): 
      self.root.columnconfigure(c, weight=1) 

     # Create a list of the Frames in the order they were created 
     frames = [] 
     j = 0 
     for i in range(1,5): 
      Frame = tki.Frame(self.root, borderwidth=1, bg = 'blue') 
      Frame.grid(row = j, column = 0, rowspan = 2, columnspan = 2, sticky = 'w, e, n, s') 

      # Add the Frame to the list 
      frames.append(Frame) 

      # Also, just as an FYI, j = j + 2 can be better written like this 
      j += 2 

     # To demonstrate 
     print(frames) 

     # This is the first Frame created 
     print(frames[0]) 

app = App() 
app.root.mainloop() 

要訪問的框架,只是索引列表。

+0

謝謝iCodez的回答。我的問題已經解決,現在概念也很清楚。如果我們用其他編程語言(比如C)做同樣的事情,那麼我們將在那裏使用數組的概念。謝謝 – AshA

+1

@AshA:很高興我能幫上忙。但是,如果您覺得我的答案能夠恰當地解決您的問題,那麼您應該接受它以保持清潔和有組織。如果沒有,我會很樂意進一步提供幫助。 – iCodez

+0

是的,用你的答案我的問題解決了,我90%完成了我的工作。你可以建議任何閱讀來探索更多關於Python編程的GUI編程嗎? – AshA

相關問題