use*_*282 3 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()
Run Code Online (Sandbox Code Playgroud)
当我运行它时,无论为“SOME_VALUE_HERE”设置什么值,两个标签都占据窗口的一半,无论是否调用了 Grid.columnconfigure,或者是否在 grid() 中使用了粘性参数。
除非我忽略了一些东西,否则我会认为设置 columnspan 会强制第二个标签的宽度是第一个标签的 'SOME_VALUE_HERE' 倍。
我误解了网格的工作原理吗?我将如何实现这种行为?
默认情况下,空网格列的宽度为零,因此您描述了下表。默认情况下,网格几何管理器将尝试优化您的应用程序使用的屏幕空间。它将整合所有约束并生成最适合的布局。
+---------------+---------------++++
| 0 | 1 |||| <-- 2,3,4 empty, 0 width
+---------------+---------------++++
| 1 column wide | 4 column wide |
+---------------+---------------++++
Run Code Online (Sandbox Code Playgroud)
为了提供严格的比例列的宽度,你必须使用uniform的选项columnconfigure。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")
Run Code Online (Sandbox Code Playgroud)
请注意,仅使用这两个标签,您可以通过调整第 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")
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
19754 次 |
| 最近记录: |