在 tkinter 中是否可以有两列标签,下面和中间有一个标签?

foz*_*ios 2 python user-interface tkinter ui-design python-3.x

例子

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

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

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

Bry*_*ley 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选项的组合,但如果标签变得太大而无法容纳,您可能会遇到问题。做一些实验,看看什么最适合你。


nov*_*imo 5

假设您有 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()
Run Code Online (Sandbox Code Playgroud)