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 如何在它们之间分配。
我有一个 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 如何在它们之间分配。