2

我在 TKinter 中构建了一个相当复杂的 GUI,所以很自然地一直在使用 .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 处,则它会拉伸并很好地填充所有空间。如果它在框架中,它只是表现不佳。

谁能解释如何解决这个问题?

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

干杯。克里斯

4

2 回答 2

5

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

如果多于一行或多于一列具有权重,则权重描述了它们扩展的比例。例如,如果一列的权重为 2,而另一列的权重为 1,则包含 2 的列将扩展为包含 1 的列的两倍。

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

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

有关权重的简短描述,请参阅tkdocs.com网站上网格教程中标题为“处理调整大小”的部分。

于 2012-11-15T18:16:50.687 回答
1

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

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

希望能帮助到你

于 2012-11-15T17:07:41.660 回答