8

我遗漏了一些关于尺寸如何在 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)

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

谢谢,丹

4

2 回答 2

9

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

要解决此问题,请给列一个权重。在这种特定情况下,任何正整数都可以:

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

有关gridruby​​、tcl、perl 和 python 示例的更多信息,请参阅tkdocs.com 上的网格页面

于 2009-09-17T21:02:32.747 回答
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()
于 2018-06-26T12:06:47.243 回答