【问题标题】:PYTHON: How to anchor two labels to top using tkinterPYTHON:如何使用 tkinter 将两个标签锚定到顶部
【发布时间】:2019-03-16 07:07:34
【问题描述】:
import tkinter as tk

root = tk.Tk()
root.title("window")

yellow_header = tk.Label(root, text = 'Header', bg = 'light yellow')
yellow_header.pack(side = tk.TOP, anchor = tk.N, expand = 1, fill = tk.X)

yellow_header2 = tk.Label(root, text = 'paragraph', bg = 'light yellow')
yellow_header2.pack(side = tk.TOP, anchor = tk.N, expand = 1, fill = tk.X)

root.mainloop()

对于上面的代码,我试图将这两个标签都固定在顶部并直接位于彼此下方。虽然第一个标签 (yellow_header) 锚定在顶部,但第二个标签 (yellow_header2) 在展开时向中心移动。我该如何解决这个问题?

提前谢谢你!

【问题讨论】:

    标签: python user-interface tkinter


    【解决方案1】:

    不要使用expand=1。来自effbot

    expand 选项告诉管理员为小部件框分配额外的空间。如果父小部件的大小超过了容纳所有打包小部件所需的大小,则任何超出的空间都将分配给所有 expand 选项设置为非零值的小部件。

    使用expand=1,当您将窗口变大时,空间会分布在两个标签之间。因此,即使您只告诉他们在 X 方向上填充它,它们也会在两个方向上都有空间。第二个标签直接放在第一个标签可用的空间下方,即窗口的一半。

    我试图在this answer 中解释和可视化expandfill 之间的区别。

    附:你也不需要anchor=tk.N。当小部件可用的空间和小部件的大小相同时,锚选项没有区别。此外,side=tk.TOP 是默认值,因此您也可以决定省略它,只留下fill=tk.X

    【讨论】:

      【解决方案2】:

      查看我看到的文档:

      Text 小部件用于在多行中显示文本。

      这似乎有效:

      import tkinter as tk
      
      root = tk.Tk()
      root.title("window")
      
      yellow_header = tk.Label(root, text = 'Header\nParagraph', bg = 'light yellow')
      yellow_header.pack(side = tk.TOP, anchor = tk.N, expand = 1, fill = tk.X)
      

      这可能有点特定于操作系统,也许正确的方法是:

      import os
      ...
      yellow_header = tk.Label(root, text = 'Header' + os.linesep + 'Paragraph', bg = 'light yellow')
      

      当增加第一个字符串的长度时,第二个仍然保留在中心。

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2021-01-25
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多