window/frame 不会调整带有粘性的网格中的小部件的大小

Widgets in grid with sticky aren't resized with the window/frame

我有一个 window 包含具有网格布局的小部件,由以下代码创建:

from tkinter import *

window = Tk()

label = Label(text="that label")
label.grid(row=0, column=0, sticky='EW')

entry = Entry()
entry.grid(row=1, column=0, sticky='EW')

window.mainloop()

我希望标签和条目小部件随 window 调整大小,但如果我放大 window,它看起来像这样:

如果我像这样使用 pack 而不是 grid(使用 fill 选项):

from tkinter import *

window = Tk()

label = Label(text="that label")
label.pack(fill=X)

entry = Entry()
entry.pack(fill=X)

window.mainloop()

然后放大的 window 看起来像这样(我希望它看起来像):

为什么在使用 grid 时小部件不随 window 调整大小,我该如何让它们这样做?

至于为什么 grid 几何管理器不自动执行此操作 - 我真的不知道。也许有人可以详细说明一下?

但解决方法很简单:使用grid_columnconfigure(或分别为grid_rowconfigure):

这是一个与 frame/window 对象关联的函数,该对象将其修改的列(或行)作为参数(也可以是索引列表或所有 columns/rows) 和要配置的参数(有关详细说明,请参阅 the documentation)。

要让小部件随主对象调整大小,必须将参数 weight 设置为非零值。您的示例如下所示:

from tkinter import *

window = Tk()

label = Label(text="that label")
label.grid(row=0, column=0, sticky='EW')

entry = Entry()
entry.grid(row=1, column=0, sticky='EW')

window.grid_columnconfigure(0, weight=1)

window.mainloop()

如果您 运行 标签和条目小部件的代码将相应地更改大小:

请注意,如果您对不同的 columns/rows 使用不同的 weight 值,它们之间的关系将决定额外的 space 如何在它们之间分配。