2014-01-07 35 views
0

當我運行以下代碼時,創建的標籤出現在入口框頂部,就好像它們沒有被添加到同一個網格中一樣。出現在Tkinter入口處的標籤

class Application(Frame): 
    def __init__(self,master): 
     super(Application,self).__init__(master) 
     self.grid() 
     self.new_intervals() 

    def new_intervals(self): 
     self.int_label = Label(text="Interval Name") 
     self.int_label.grid(row=0, column=0,sticky=W) 
     self.int_time_label = Label(text="Time (HH:MM:SS)") 
     self.int_time_label.grid(row=0, column=1,sticky=W) 
     self.box1 = Entry(self) 
     self.box1.grid(row=1,column=0,sticky=W) 
     self.box2 = Entry(self) 
     self.box2.grid(row=1,column=1,sticky=W) 
     self.box3 = Entry(self) 
     self.box3.grid(row=2,column=0,sticky=W) 
     self.box4 = Entry(self) 
     self.box4.grid(row=2,column=1,sticky=W) 


root = Tk() 
root.title("Interval Timer") 
root.geometry("400x500") 
app=Application(root) 
root.mainloop() 

我知道我可以在一個循環中添加這些箱子,但是,我不能得到它的那一刻

回答

2
  • 應用框架是在0行,列不循環工作主窗口的0。這是您不指定任何內容時的默認值。此外,作爲默認設置,它們出現在中間
  • 此框架具有分佈在兩行中的四個條目窗口小部件,使框架長大以適合這些條目窗口小部件
  • 「間隔名稱」標籤也被放置在第0行,主窗口的第0列,因爲這是你明確告訴它做的,因爲它的父窗口是主窗口。
  • 「時間」標籤也在主窗口的第0行,因爲它的父級是主窗口
  • 這兩個標籤都出現在行的垂直中心,因爲這是默認行爲你沒有重寫,這就是它們出現在條目窗口小部件上的原因。

如此,因爲標籤和應用程序框架在同一行的主窗口中,而且由於標籤默認的垂直中心之中,他們似乎是在錄入組件的中間。

我假設你打算爲標籤爲幀的孩子,所以你需要指定「自我」作爲第一個參數創建它們時:

self.int_label = Label(self, text="Interval Name") 
... 
self.int_time_label = Label(self, text="Time (HH:MM:SS)") 

我還建議把所有網格報表對於一個特定的主窗口,所以更容易看到您的小部件的組織。根據我的經驗,這使代碼更易於閱讀和維護。

例如:

self.int_label = Label(...) 
self.int_time_label = Label(...) 
self.box1 = Entry(...) 
... 
self.int_label.grid(...) 
self.int_time_label.grid(...) 
self.box1.grid(...) 
...