如何使用 Tkinter 在 Python 2.7 中创建等宽列

Posted

技术标签:

【中文标题】如何使用 Tkinter 在 Python 2.7 中创建等宽列【英文标题】:How to create equal-width grid columns with Tkinter? 【发布时间】:2014-01-26 23:09:15 【问题描述】:

如何强制 Tkinter 应用程序窗口中的列等宽?

tkdocs 网站声明如下:

每列的宽度(或每行的高度)取决于列或行中包含的小部件的宽度或高度。这意味着在勾勒出您的用户界面并将其划分为行和列时,您无需担心每一列或每一行的宽度(或高度,大概)相等。

http://www.tkdocs.com/tutorial/grid.html

但我希望列宽度相等,最好使 all 列的宽度取决于 any 列中最宽的小部件.有没有办法干净地实现这一点(即,不要玩单元格填充,直到我通过反复试验或通过任意为每一列分配明显足够的最小宽度使它们都相同)?此外,是否可以有选择地为网格中的某些列而不是所有列(例如,以便 X Y 列根据 X 列中最宽的小部件调整大小> Y,但是 Z 列的大小是根据 Z 列中最宽的小部件)?

【问题讨论】:

【参考方案1】:

要使网格布局的所有列具有相同的宽度,您必须将这些列配置为具有相同的权重并位于同一个统一组中。此配置与主小部件相关联,而不是任何包含的小部件(因为列可以包含许多小部件,当然)。

在标准 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")

然后对您要设置的其他列索引重复此操作。 (如您所见,这两种情况下的代码非常相似。)

【讨论】:

感谢您的回答,这似乎是正确的 - 因此我接受了它。我发现它不能解决我的问题,但我相信这是因为我的一些列是由一个小部件跨越的。不过,如何处理这个问题属于另一个问题。 我在这里添加了另一个问题,使多列小部件问题变得清晰:***.com/questions/21009232/…

以上是关于如何使用 Tkinter 在 Python 2.7 中创建等宽列的主要内容,如果未能解决你的问题,请参考以下文章

Python 2.7 Tkinter标签虽然有效但未显示

Python 2.7:通过 Ttk 的主题“通用对话框”tkinter 接口?

matplotlib.pyplot 在 python 2.7 上给出错误“ImportError:没有名为 Tkinter 的模块”

Python 2.7 - CentOS 7 - ImportError: No module named Tkinter

在 Python 2.7 中将 FuncAnimation() 与按钮链接

使用 Pmw 时出现“ImportError:没有名为 tkinter 的模块”