Grid Tkinter网格列跨度已忽略
考虑下面的python脚本Grid Tkinter网格列跨度已忽略,grid,tkinter,columnspan,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,columns
#!/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()中是否使用sticky参数,两个标签都占据了窗口的一半
除非我忽略了什么,否则我会认为设置columnspan会迫使第二个标签的宽度为第一个标签的“SOME_VALUE_HERE”倍
我是否误解了网格的工作原理?我将如何实现这种行为?当您在第1列中放置一个列跨度为2(或更多)的内容时,这意味着它将位于第1列和第2列(以此类推)。但是,如果没有任何内容控制列的宽度,则该列的宽度将为零。您需要强制第2列具有一个宽度,方法是将某个内容放入其中,给它一个最小值,或者强制使用统一的列
当我看你的代码时,我猜不出你认为第2列应该有多宽,计算机也猜不到 默认情况下,空网格列的宽度为零,因此您描述了下表。默认情况下,Grid geometry manager将尝试优化应用程序使用的屏幕不动产。它将集成所有约束,并生成最适合的布局
+---------------+---------------++++
| 0 | 1 |||| <-- 2,3,4 empty, 0 width
+---------------+---------------++++
| 1 column wide | 4 column wide |
+---------------+---------------++++
请注意,仅使用这两个标签,可以通过调整列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")
我有一个类似的问题,但却发现元素受到最宽的小部件的限制。我们可以放心地说,Tkinter的配置使您的应用程序统一,因为它应该是一个规则的重复方形/三角形结构。覆盖默认选项的解决方案
columnspan
调整宽度columnconfigure()
我想我明白了,有没有办法说‘a栏的宽度总是B栏宽度的几倍’,那么?
label2.grid(row=0,column=1) #no columnspan
root.grid_columnconfigure(0, weight=1, uniform="foo")
root.grid_columnconfigure(1, weight=width, uniform="foo")