2013-04-23 54 views
0

我想創建一個使用Tkinter的Python gui的基本佈局。Python Tkinter網格問題 - 用戶錯誤?

#!/usr/bin/env python 
from Tkinter import * 

#create root 
root = Tk() 

banner = Frame(root, width=500) 
body = Frame(root, width=500) 
banner.grid() 
body.grid() 


bannercontent = Label(banner, bg="Green", text="Green").grid(row=0, column=0) 
bannerbuttons = Label(banner, bg="Red", text="Red").grid(row=0, column=1) 
bodycontent = Label(body, bg="Blue", text="Blue").grid(row=1, column=0, columnspan=2, sticky=E+W) 
root.mainloop() 

然而與上述情況,藍標並沒有擴張,填補了2列,我希望,即填補綠色和紅色下方的空間。請問我做錯了什麼?這裏 http://imgur.com/nGWQX9y

example

例預先感謝您

回答

1

你有幾件事你的代碼錯誤。首先,你沒有指定sticky選項,所以小部件不會「粘」(即:增長或縮小)到單元的邊緣。您的bodycontent標籤實際上佔據了兩列,但框架本身並未擴展到主窗口的整個寬度。

第二個問題是,你似乎認爲列跨越整個應用程序。他們不。您在banner中有兩列,因爲您在第0列和第1列中放置了小部件。但是,bodycontent只有一列(或者,您可以說它有兩個,但第二列的寬度爲零)。第一幀中的列大小與第二幀中的列沒有關係。因此,底部框架內容將不會與頂部框架對齊。

你的代碼存在的第三個問題是你沒有給你的行或列「權重」。 weight屬性告訴Tkinter如何分配任何額外的空間。既然你沒有這樣做,當你增長或縮小窗口時,你的GUI不會以一種愉快的方式調整大小。一個好的經驗法則是,對於任何給定的容器,至少應該給一行和一列賦予一個非零權重。