虽然图片基本上显示了我想要做的事情,但是:
- 所有标签都应该是相同大小的完美正方形
- 2 列中的标签应完全对齐
- 底部的标签应该完全位于另外两个标签的下方和中间。
- 实际的标签应该是实心的,并且标签的文本周围应该有一点空间(文本不应该占据整个标签)。
如果可能,应使用网格。我将使用 python3
虽然图片基本上显示了我想要做的事情,但是:
如果可能,应使用网格。我将使用 python3
是的,当然有可能。Tkinter 可以说是所有 GUI 工具包中最灵活、最易于使用的几何管理器。只有pack
, place
,grid
可能没有你做不到的布局。
从一张纸开始。严重地。在您能够想象这一点之前,请使用纸张。
绘制四个等宽的列。将这些列分成三个等高的行。这就是你用来布置一切的东西。
现在,在上面画出你的标签。请注意,在前两行,标签占据第 1 列和第 2 列,以及第 3 和第 4 列。还要注意,在第三行,标签占据第 2 列和第 3 列。
现在,将其转换为代码。Tkinter 从零开始对行和列进行编号,因此第一个标签是第 0 行、第 0 列,它跨越两列。旁边是第 0 行第 2 列的标签,它也跨越两列。
下一行以同样的方式完成。
对于第三行,标签是第 2 行第 1 列,它跨越 2 列。
不要忘记调用grid_rowconfigure
和grid_columnconfigure
。例如,您可能想要使用该uniform
属性。
为了使标签成为完美的正方形,我建议将每个标签放在一个框架中,将框架的宽度设置为您想要的任何大小,然后关闭几何传播,以便框架设置标签的大小,而不是标签设置框架的大小。然后将框架放入网格中,而不是标签。
您还可以对行和列使用uniform
和minsize
选项的组合,但如果标签太大而无法容纳,您可能会遇到问题。做一些实验,看看什么最适合你。
假设您有 5 个按钮(标签或其他任何东西):
import tkinter as tk
master = tk.Tk()
master.title('Test')
master.geometry("100x100+700+350")
b1 = tk.Button(text='1')
b1.grid(row=0, column=0)
b2 = tk.Button(text='2')
b2.grid(row=0, column=1)
b3 = tk.Button(text='3')
b3.grid(row=1, column=0)
b4 = tk.Button(text='4')
b4.grid(row=1, column=1)
b5 = tk.Button(text='5')
b5.grid(row=2, columnspan=2)
tk.mainloop()