Tkinter Grid Columnspan被忽略了

时间:2014-04-25 22:55:10

标签: grid tkinter columnspan

考虑以下python脚本

#!/usr/bin/env python
from Tkinter import Tk, Label

width = SOME_VALUE_HERE

root = Tk()
label1 = Label(root, text='1 columns wide')
label2 = Label(root, text='%i columns wide' % width)

label1.grid()
label2.grid(row=0,column=1,columnspan=width)

root.mainloop()

当我运行它时,无论为SOME_VALUE_HERE'设置了什么值,两个标签占用窗口的一半,无论是否调用Grid.columnconfigure,或者粘贴参数用于格()。

除非我忽略了某些内容,否则我会认为设置columnspan会强制第二个标签为'SOME_VALUE_HERE'时间与第一次一样宽。

我误解了网格是如何工作的吗?我将如何实现这一行为?

3 个答案:

答案 0 :(得分:2)

当您在第1列中放入两个(或更多)的columnpan时,这意味着它将位于第1列和第2列(等)中。但是,如果没有任何内容控制列的宽度,则该列的宽度为零。您需要强制第2列通过在其中放置一些东西,给它一个minsize或强制统一列来进行widthe。

当我查看您的代码时,我无法猜测您认为第2列应该有多宽,也无法计算机。

答案 1 :(得分:2)

默认情况下,空网格列的宽度为零,因此您描述了下表。默认情况下,网格几何管理器会尝试优化应用程序使用的屏幕空间。它将整合所有约束并产生最适合的布局。

+---------------+---------------++++
|       0       |       1       |||| <-- 2,3,4 empty, 0 width
+---------------+---------------++++
| 1 column wide | 4 column wide    |
+---------------+---------------++++

要提供严格的比例列宽,您必须使用uniform的{​​{1}}选项。 columnconfigure采用任意值来指定共享此proprotions的列组,uniform参数用于正确处理小部件大小调整。

weight

请注意,对于这两个标签,您可以通过调整第1列的宽度来实现相同的布局。当您填充第2,3,4列时,仍会出现差异......

label1.grid(row=0, column=0)
label2.grid(row=0,column=1, columnspan=width)
for i in range(width+1):
    root.grid_columnconfigure(i, weight=1, uniform="foo")

答案 2 :(得分:1)

我遇到类似的问题只是发现元素受到最宽的小部件的限制。我们可以有把握地说,Tkinter配置为使你的应用程序统一,因为它应该是一个规则的重复方形/三角形结构。覆盖默认选项的解决方案。

  1. 考虑到Tkinter的自动优化,使用最大小部件(网格框)的宽度和高度,并按比例将其他框与之关联。
  2. 使用上述方法,使用columnspan调整宽度。
  3. 使用columnconfigure()
  4. 配置宽度