gpt4 book ai didi

grid - Tkinter 网格列跨度被忽略

转载 作者:行者123 更新时间:2023-12-02 08:20:07 26 4
gpt4 key购买 nike

考虑以下 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/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com