在下面的最小示例代码中,您可以将最后一个range(((当前为3(更改为6,并注意到带有按钮的框架都比使用3运行时更小。我已经将"lower_frame"的6列配置为全部为权重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()
如果希望所有行和所有列具有相同的宽度/高度,可以设置每行和每列的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')