考虑以下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'时间与第一次一样宽。
我误解了网格是如何工作的吗?我将如何实现这一行为?
答案 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配置为使你的应用程序统一,因为它应该是一个规则的重复方形/三角形结构。覆盖默认选项的解决方案。
columnspan
调整宽度。columnconfigure()