Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/actionscript-3/6.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Grid Tkinter网格列跨度已忽略_Grid_Tkinter_Columnspan - Fatal编程技术网

Grid Tkinter网格列跨度已忽略

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

考虑下面的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()中是否使用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的配置使您的应用程序统一,因为它应该是一个规则的重复方形/三角形结构。覆盖默认选项的解决方案

  • 考虑到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")