我遗漏了一些关于尺寸如何在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()
许可以下: CC-BY-SA归因
不隶属于 StackOverflow
scroll top