我遗漏了一些关于尺寸如何在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)
我错过了什么?在现实生活中,我有一些堆叠的嵌套框架,没有像我想的那样扩展。
谢谢, 丹
答案 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()