在下面的最小示例代码中,您可以将最后一个范围()(当前为3)更改为6,并注意带有按钮的帧都比使用3运行时更小。我已经配置了6列& #34; lower_frame"所有都是重量1.预期的结果是,无论我放入多少按钮,都有6个相同宽度的空列。如果我在其中放置3个按钮,默认情况下如下例所示,按钮非常大,只留下大约1个按钮的空间。如果我放入6个按钮,它们会填满空间,每个按钮都会变小。
无论我在单元格中放置多少个小部件,如何实现具有相等宽度列的预期结果?这里的目标是这些按钮的标准尺寸,它基于屏幕的比例,而不是像素大小,并且无论按钮的数量如何,它总是相同的。我意识到我可以使用边界框进行一堆数学运算并在运行时以编程方式设置尺寸,但这看起来有点矫枉过正,缺乏优雅。
最小例子:
import Tkinter as tk
import ttk
mods = {}
modBtns = {}
root = tk.Tk()
upper_frame = ttk.Frame(master=root)
lower_frame = ttk.Frame(master=root)
right_frame = ttk.Frame(master=root)
root.columnconfigure(0, weight=3)
root.columnconfigure(1, weight=1)
root.rowconfigure(0, weight=1)
root.rowconfigure(1, weight=5)
for i in range(6):
lower_frame.columnconfigure(i, weight=1)
for i in range(5):
lower_frame.rowconfigure(i, weight=1)
upper_frame.grid(column=0, row=0, sticky=tk.N + tk.S + tk.E + tk.W)
lower_frame.grid(column=0, row=1, sticky=tk.N + tk.S + tk.E + tk.W)
right_frame.grid(column=1, row=0, sticky=tk.N + tk.S + tk.E + tk.W)
for i in range(3):
mods[i] = ttk.Frame(master=lower_frame)
mods[i].columnconfigure(0, weight=1)
mods[i].rowconfigure(0, weight=1)
modBtns[i] = ttk.Button(master=mods[i], text="mod{0}".format(i))
modBtns[i].grid(column=0, row=0, sticky=tk.N + tk.S + tk.E + tk.W)
mods[i].grid(column=i, row=0, sticky=tk.N + tk.S + tk.E + tk.W)
root.geometry("700x700+0+0")
root.mainloop()
答案 0 :(得分:1)
如果希望所有行和所有列具有相同的宽度/高度,则可以设置每行和每列的uniform
属性。具有相同uniform
值的所有列将具有相同的宽度,并且具有相同uniform
值的所有行将具有相同的高度。
注意:uniform
属性的实际值是无关紧要的,只要它是一致的。
for i in range(6):
lower_frame.columnconfigure(i, weight=1, uniform='whatever')
for i in range(5):
lower_frame.rowconfigure(i, weight=1, uniform='whatever')