【问题标题】:Is it possible in tkinter to have two columns of labels with one label below and in the middle of them?在 tkinter 中是否有可能有两列标签,其中一个标签位于下方和中间?
【发布时间】:2013-08-08 19:18:14
【问题描述】:

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

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

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

【问题讨论】:

    标签: python user-interface python-3.x tkinter ui-design


    【解决方案1】:

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

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

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

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

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

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

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

    别忘了致电grid_rowconfiguregrid_columnconfigure。例如,您可能想要使用 uniform 属性。

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

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

    【讨论】:

    • 很好的答案!你提到包装地点和网格。您一次只能使用一个,对吗?另外,如果我将一个框架设置为占据一个单元格,那么该单元格将根据我放入的小部件数量来扩展,对吗?
    • 您可以一次使用一个用于单个容器,但您可以(并且应该)在一个完整的应用程序中将它们混合搭配。
    【解决方案2】:

    假设您有 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()
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2019-10-18
      • 1970-01-01
      • 2018-04-15
      • 1970-01-01
      • 2018-12-06
      • 2019-09-20
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多