Tkinter网格几何管理器大小传播(带粘性)

时间:2009-09-17 20:25:57

标签: tkinter tk

我遗漏了一些关于尺寸如何在Tk中传播的东西。试试这个:

from Tkinter import *

root = Tk()

frame1 = Frame(root, border=4, relief=RIDGE)
frame1.grid(sticky=E+W)
frame2 = Frame(root, border=4, relief=RIDGE)
frame2.grid(sticky=E+W)

label1 = Label(frame1, text='short', background='white')
label1.grid(sticky=E+W)
label2 = Label(frame2, text='quite a bit longer', background='white')
label2.grid(sticky=E+W)

root.mainloop()

label1在frame1内,label2在frame2内。 label1比label2更窄,如白色背景所示。但是frame1和frame2的宽度相同,如边框所示。我认为粘性会将label1扩展为与其父级相同的宽度。

如果我将label1和label2放在同一帧中,那么label1的出现与label2一样宽:

frame1 = Frame(root, border=4, relief=RIDGE)
frame1.grid(sticky=E+W)

label1 = Label(frame1, text='short', background='white')
label1.grid(sticky=E+W)
label2 = Label(frame1, text='quite a bit longer', background='white')
label2.grid(sticky=E+W)

我错过了什么?在现实生活中,我有一些堆叠的嵌套框架,没有像我想的那样扩展。

谢谢, 丹

2 个答案:

答案 0 :(得分:9)

行和列具有“权重”,描述它们如何增长或缩小以填充主数据库中的额外空间。默认情况下,行或列的权重为零,这意味着您已告知标签填充列,但您尚未告知列填充主框架。

要解决此问题,请为列添加重量。在这种特定情况下,任何正整数都可以:

frame1.columnconfigure(0, weight=1)
frame2.columnconfigure(0, weight=1)

有关grid的更多信息,以及ruby,tcl,perl和python中的示例,请参阅the grid page on tkdocs.com

答案 1 :(得分:0)

此解决方案可以使用列和框架,但是要使标签在网格中具有相同的宽度,则不需要封闭框架。参见下面的示例

from tkinter import *

root = Tk()

label1 = Label(root, text='short', bg='light green', relief=RIDGE)
label1.grid(sticky=E+W)
label2 = Label(root, text='quite a bit longer', bg='light green', relief=RIDGE)
label2.grid(sticky=E+W)

root.mainloop()