如何使 LabelFrame 的框架不可见? (Tkinter)

How do I make a LabelFrame's frame not visible? (Tkinter)

我的代码如下:

import tkinter as tk
from tkinter import ttk

window = tk.Tk()
window.title('None')

label = ttk.LabelFrame(window, text = 'What I want to delete')
label.grid(column = 0, row = 0, padx = 5, pady = 5)
text = ttk.Label(label, text = 'Hello World')
text.grid(column = 0, row = 0)

window.mainloop()

with frame

现在令我惊讶的是,当我进行以下更改时:

import tkinter as tk
from tkinter import ttk

window = tk.Tk()
window.title('None')

label = ttk.LabelFrame(window, text = 'What I want to delete').grid(column = 0, row = 0, padx = 5, pady=5)
text = ttk.Label(label, text = 'Hello World').grid(column = 0, row = 0)

window.mainloop()

标签的框架没有出现。只有文字。如下图:

without frame

也就是说LabelFrame是存在的,但是没有显示,因为没有报错。我觉得。

总之,这就是我“解决它”的方式。所以,我的问题是,是否有一种功能可以不在 LabelFrame 中显示框架?

ttk.LabelFrames 只有当里面有东西或者它们有固定大小时才可见。在第一个示例中,您给出的 ttl.Label 小部件 text='Hello Word' 显然位于 LabelFrame 内部,因为您将其作为父级传递。但在第二个例子中它不是。您可能认为这是因为您还将 label 定义为 ttk.Label 父级,但如果您这样做 print(label) 您会看到它会打印 None 并且在 tkinter 中,如果您通过None 作为 widget master 它将理解 master 是根 Tk() widget。

那么,为什么会这样?这两个示例之间的区别在于,第一个 label=ttk.LabelFrame() 是 LabelFrame 对象(LabelFrame class 的一个实例),而第二个 label=ttk.LabelFrame().grid() 是网格的输出方法,并且由于网格方法不 return 任何标签等于 None。总之,您正在做的是将 LabelFrame 与任何东西放在里面,然后是第二个标签,两者都在主 window 的相同位置,这就是为什么您看不到 LabelFrame 的原因。

好的,那么如何让LabelFrame不可见呢?最好的选择不是使用 ttk.LabelFrame,而是使用 tk.LabelFrame,因为现在您可以使用 label.configure({"relief":"flat", "text":""}) 与边框一起消失。当然,这看起来框架不存在,但框架内的所有内容仍然可见。如果你想和标签内的东西一起消失,你可以使用 label.destroy() (你将无法恢复标签)或 label.grid_forget() (只会 'ungrid' 标签) .