2013-04-23 86 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不会以一种愉快的方式调整大小。一个好的经验法则是,对于任何给定的容器,至少应该给一行和一列赋予一个非零权重。