如何使 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' 标签) .
我的代码如下:
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' 标签) .