3

例子

虽然图片基本上显示了我想要做的事情,但是:

  1. 所有标签都应该是相同大小的完美正方形
  2. 2 列中的标签应完全对齐
  3. 底部的标签应该完全位于另外两个标签的下方和中间。
  4. 实际的标签应该是实心的,并且标签的文本周围应该有一点空间(文本不应该占据整个标签)。

如果可能,应使用网格。我将使用 python3

4

2 回答 2

5

是的,当然有可能。Tkinter 可以说是所有 GUI 工具包中最灵活、最易于使用的几何管理器。只有pack, place,grid可能没有你做不到的布局。

从一张纸开始。严重地。在您能够想象这一点之前,请使用纸张。

绘制四个等宽的列。将这些列分成三个等高的行。这就是你用来布置一切的东西。

现在,在上面画出你的标签。请注意,在前两行,标签占据第 1 列和第 2 列,以及第 3 和第 4 列。还要注意,在第三行,标签占据第 2 列和第 3 列。

现在,将其转换为代码。Tkinter 从零开始对行和列进行编号,因此第一个标签是第 0 行、第 0 列,它跨越两列。旁边是第 0 行第 2 列的标签,它也跨越两列。

下一行以同样的方式完成。

对于第三行,标签是第 2 行第 1 列,它跨越 2 列。

不要忘记调用grid_rowconfiguregrid_columnconfigure。例如,您可能想要使用该uniform属性。

为了使标签成为完美的正方形,我建议将每个标签放在一个框架中,将框架的宽度设置为您想要的任何大小,然后关闭几何传播,以便框架设置标签的大小,而不是标签设置框架的大小。然后将框架放入网格中,而不是标签。

您还可以对行和列使用uniformminsize选项的组合,但如果标签太大而无法容纳,您可能会遇到问题。做一些实验,看看什么最适合你。

于 2013-08-07T12:54:54.280 回答
4

假设您有 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()
于 2017-07-30T18:22:18.193 回答