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

Python TKinter-使用网格布局的窗口小部件不会“粘滞”在框架中,python,tkinter,Python,Tkinter,我正在TKinter中构建一个相当复杂的GUI,因此自然地使用了.grid函数 我已经将一些小部件分组到框架中,以使它们更易于处理,但由于某种原因,当我在框架中使用.grid小部件时,粘性属性似乎不起作用-我的小部件不会填充整个框架 例如: f3 = tk.Frame(self, borderwidth=1, relief="ridge") f3.grid(row=0, column=0, sticky="NS") tk.Label(f3, text="Site List").grid(in_=

我正在TKinter中构建一个相当复杂的GUI,因此自然地使用了.grid函数

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

例如:

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单元格中的空间,但是列表框并没有填充框架中的所有空间,即使我要求它是粘性的

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

有人能解释一下如何避开这个问题吗

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

干杯。
Chris

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

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

希望它有帮助

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

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

您可以使用grid_rowconfigure和grid_columnconfigure选项为包含的小部件分配权重:

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

有关权重的简要说明,请参见网站上网格教程的标题部分

如果我在一个框架内有一个文本小部件呢??在我的例子中,框架正在扩展,但文本没有expanding@MahasishShome:你有什么小部件并不重要。如果设置了正确的选项,文本小部件将在框架内展开。文本小部件或框架没有什么特别之处。@BryanOakley:你能检查一下我犯了什么错误吗?