grid - Tkinter 网格列跨度被忽略

标签 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,或者在 grid() 中使用粘性参数。

除非我忽略了某些事情,否则我会认为设置 columnspan 会强制第二个标签的宽度为第一个标签的“SOME_VALUE_HERE”倍。

我是否误解了网格的工作原理?我将如何实现这种行为?

最佳答案

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

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

要提供严格的比例列宽,您必须使用columnconfigureuniform 选项。 uniform 采用任意值来指定共享这些比例的列组,并且 weight 参数用于正确处理小部件调整大小。

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")

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

label2.grid(row=0,column=1) #no columnspan
root.grid_columnconfigure(0, weight=1, uniform="foo")
root.grid_columnconfigure(1, weight=width, uniform="foo")

关于grid - Tkinter 网格列跨度被忽略,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/23304403/

相关文章:

python : AttributeError

WPF获取元素的ColumnSpan

ExtJS 4 - 网格分组仅展开/折叠某些组

java - 检查网格 Java 中是否存在行的最有效方法

extjs - EXT JS。如何在“缓冲滚动”示例中加载所有行?

带有第 n 个 child 的 css 网格

python - Tkinter框架问题: resizing does not work

python - 如何使用 Tkinter 按钮退出 Python?