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

2024-04-26 14:17:52 发布

您现在位置:Python中文网/ 问答频道 /正文

我的代码如下:

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中显示这个框架


Tags: textfromimporttitletkinterascolumnwindow
1条回答
网友
1楼 · 发布于 2024-04-26 14:17:52

ttk.LabelFrames只有当里面有东西或大小固定时才可见。在第一个示例中,您给出了带有ttl.Labeltext='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()(这将仅“取消栅格化”标签)

相关问题 更多 >