TKinter-使用网格布局的小部件不会“粘贴”在框架中

2024-05-06 08:16:25 发布

您现在位置:Python中文网/ 问答频道 /正文

我正在TKinter中构建一个相当复杂的图形用户界面,因此自然使用了.grid函数。

我已经将一些小部件分组到框架中,以使它们更易于处理,但是由于某些原因,当我在框架中使用.grid和小部件时,sticky属性似乎不起作用-我的小部件没有填满整个框架。

示例:

f3 = tk.Frame(self, borderwidth=1, relief="ridge")
f3.grid(row=0, column=0, sticky="NS")
tk.Label(f3, text="Site List").grid(in_=f3, row=0, column=0)
self.sitelist = tk.Listbox(f3)
self.sitelist.grid(in_=f3, row=1, column=0, sticky="NS")

在上面的代码中,框架f3填充了根小部件的0,0单元格中的空间,但是列表框并没有填充框架中的所有空间,即使我要求它是粘性的“NS”。

如果将Listbox放在根小部件的0,0处,那么它将拉伸并填充所有空间。如果它在框架中,就不会表现得很好。

有人能解释一下怎么避开这个吗?

我以为使用框架可以简化我的布局,但事实并非如此!!!

干杯。 克里斯


Tags: inself框架部件tkinter空间columntk
2条回答

您需要给一个或多个列和行“权重”。通常只有一行一列,权重为1(默认值为零)。当调整包含小部件或窗口的大小时,任何具有权重的行或列都将展开和收缩。

如果多行或多列具有权重,则权重描述它们展开的比例。例如,如果一个列的权重为2,另一个列的权重为1,则具有2的列的扩展量将是具有1的列的两倍。

可以使用grid_rowconfiguregrid_columnconfigure选项为包含的小部件分配权重:

f3.grid_rowconfigure(0, weight=1)
f3.grid_columnconfigure(0, weight=1)

有关权重的简短描述,请参见tkdocs.com网站上名为Handling Resize的网格教程部分。

首先,在实例化标签时不应该同时对其进行网格划分。然后,必须使用Grid.rowconfigure将“weight”添加到行,使用Grid.columnconfigure将其添加到列。权重控制扩展,并且必须为非零才能允许网格扩展小部件。 如果在代码中添加以下行,则它应该可以工作:

Grid.columnconfigure(f3, 0, weight=1)
Grid.rowconfigure(f3, 0, weight=1)
Grid.rowconfigure(f3, 1, weight=1)

希望有帮助

相关问题 更多 >