如何强制Tkinter应用程序窗口中的列宽度相等?
tkdocs网站声明如下:
每列的宽度(或每行的高度)取决于列或行中包含的小部件的宽度或高度。这意味着在绘制用户界面并将其划分为行和列时,您无需担心每个列或行的宽度相等[或高度,大概是]。
http://www.tkdocs.com/tutorial/grid.html
但我希望列的宽度相等,最好是使所有列的宽度取决于任何列中最宽的小部件。有没有办法干净利落地实现这一目标(即不是通过玩细胞填充,直到我通过反复试验或任意为每一列任意分配一个明显足够的最小宽度得到它们)?此外,可以选择性地对网格中的某些列(但不是所有列)执行此操作(例如,使列X 和 Y的大小根据列X 或 Y,但是Z列根据Z列中最宽的小部件调整大小?)
答案 0 :(得分:12)
要使网格布局使所有列具有相同的宽度,您必须将这些列配置为具有相同的权重并且位于相同的统一组中。此配置与主窗口小部件相关联,而不是任何包含的窗口小部件(因为列当然可以包含许多窗口小部件)。
在标准Tk中,这可以通过以下方式完成:
# "fred" is just some arbitrary key; it means nothing other than to name the group
grid columnconfigure $master 0 -weight 1 -uniform fred
在Tkinter中(请注意,uniform
似乎是not documented in the docstring,但这正是您所需要的):
# "fred" is just some arbitrary key; it means nothing other than to name the group
master.grid_columnconfigure(0, weight=1, uniform="fred")
然后重复您要为其设置的其他列索引。 (如您所见,代码的非常在这两种情况下相似。)