【问题标题】:tkinter - LabelFrame not displaying labeltkinter - LabelFrame 不显示标签
【发布时间】:2021-05-04 12:28:15
【问题描述】:

我正在尝试在 tkinter 中创建一个 LabelFrame,但是没有显示框架的“标题”,也没有显示 LabelFrame 周围的边框。

小例子:

import tkinter as tk

root = tk.Tk()
root.title("Test")
root.geometry("400x400")

instance = tk.Label(root, text="SCTL:").pack()

labelframe = tk.LabelFrame(root, text="Title of Frame").pack()
instance2 = tk.Label(labelframe, text="some text").pack(padx=10, pady=10)

root.mainloop()

此示例将显示“一些文本”,但不会显示“框架标题”。 我正在使用 Python 3.8.8 和 tkinter 8.6.10。有谁知道我如何获得要显示的框架的标题及其边框?

提前谢谢你!

【问题讨论】:

  • labelframe = tk.LabelFrame(root, text="Title of Frame").pack()改成labelframe = tk.LabelFrame(root, text="Title of Frame")labelframe.pack()
  • 换句话说:您将None.pack()的返回值)分配给labelframe。这使得 Label 直接成为根窗口的子窗口;没有内容,LabelFrame 缩小为空,因此没有地方显示它的边框或标题。
  • 谢谢@TheLizzard 解决了这个问题!

标签: python tkinter


【解决方案1】:

所以这里的问题是你在@jasonharper 指出的同一行中初始化和打包标签框-:labelframe = tk.LabelFrame(root, text="Title of Frame").pack()

请注意,这不起作用,因为变量 labelframe 没有被分配新初始化的 labelframe 对象,而是被调用函数包的返回值。

这意味着如果我们在两行不同的行中编写相同的内容,一行用于对象初始化,另一行用于打包,问题就消失了。像这样-:

labelframe = tk.LabelFrame(root, text="Title of Frame") # First initialize the object and store it in the variable.
labelframe.pack() # Then use the variable to pack it.

一般来说,如果 tkinter 小部件要在程序中长期使用,我建议不要将它打包在与初始化相同的行中,这不仅会丢失新初始化对象的引用,还会导致此类问题。

但是如果是临时的,那么可以在一行中完成。在这里,您在下一行中使用了 LabelFrame,因此应该分别进行打包和初始化。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2022-12-29
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2020-07-23
    • 2014-07-31
    • 1970-01-01
    相关资源
    最近更新 更多