题
我遗漏了一些关于尺寸如何在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)
我错过了什么?在现实生活中,我有一些堆叠的嵌套框架,没有像我想的那样扩展。
谢谢, 丹
解决方案
行和列有<!> quot; weight <!> quot;它描述了它们如何增长或缩小以填充主体中的额外空间。默认情况下,行或列的权重为零,这意味着您已告知标签填充列但您尚未告知列填充主框架。
要解决此问题,请为列添加重量。在这种特定情况下,任何正整数都可以:
frame1.columnconfigure(0, weight=1)
frame2.columnconfigure(0, weight=1)
有关grid
的更多信息,请参阅ruby,tcl,perl和python中的示例,请参阅 tkdocs.com 上的网格页面
其他提示
此解决方案包含列和框架,但要使标签在网格中具有相同的宽度,则不需要封闭框架。见下面的例子
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()
不隶属于 StackOverflow