我的代码如下:
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()
现在让我惊讶的是,当我做以下更改时:
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()
标签的框架不会出现。只有文本。如下图所示:
这意味着LabelFrame存在,但没有显示,因为没有错误。我想
总之,这就是我“解决它”的方式。所以,我的问题是,有没有一种功能可以让我们不在LabelFrame中显示这个框架
ttk.LabelFrames
只有当里面有东西或大小固定时才可见。在第一个示例中,您给出了带有ttl.Label
的text='Hello Word'
小部件显然位于LabelFrame内,因为您将其作为其父级传递。但在第二个例子中,情况并非如此。您可能会认为这是因为您还将label
定义为ttk.Label
父级,但如果您这样做print(label)
,您将看到它将打印None
,并且在tkinter中,如果您将None
传递为小部件主级,它将理解主级是根Tk()
小部件那么,为什么会发生这种情况?这两个示例之间的区别在于,在第一个
label=ttk.LabelFrame()
中是LabelFrame对象(LabelFrame类的实例),而在第二个label=ttk.LabelFrame().grid()
中是grid方法的输出,并且由于grid方法不返回任何内容,因此label等于None
。总之,您要做的是将LabelFrame和任何内容放在一起,然后将第二个标签放在主窗口的相同位置,这就是为什么您看不到LabelFrame的原因好的,那么如何使LabelFrame不可见?最好的选择不是使用
ttk.LabelFrame
,而是使用tk.LabelFrame
,因为现在可以使用label.configure({"relief":"flat", "text":""})
随边界消失。当然,这看起来像是框架不存在,但框架内的所有内容仍然可见。如果希望标签内的内容消失,可以使用label.destroy()
(您将无法恢复标签)或label.grid\u forget()(这将仅“取消栅格化”标签)相关问题 更多 >
编程相关推荐