Python tkinter 在 2 秒后删除标签

Posted

技术标签:

【中文标题】Python tkinter 在 2 秒后删除标签【英文标题】:Python tkinter removing label after 2 seconds 【发布时间】:2022-01-05 10:33:26 【问题描述】:

我试图在满足条件时让标签出现 2 秒。 用户应该输入 3 个字段,如果他们不输入,我不希望他们被允许继续。无论采用哪种方法,我都无法删除这个名为“warnlabel”的标签。请让我知道我做错了什么。

def get_API_KEYS():  #Main function
    root = Tk()
    """...other declarations / conditions  / window settings ..."""
    def Save_KC_Keys(): #Button press triggers this function
        if len(UE1_var.get()) == 0 or len(UE2_var.get()) == 0 or len(UE3_var.get()) == 0:
            warnlabel = Label(root, text="MUST ENTER ALL 3").grid(row=1, column=3)

            #root.forget(Label)
            #root.after(1000, root.destroy(warnlabel))
            #root.forget(warnlabel)
        """...other conditions..."""
    root.mainloop()

我尝试过 .forget / .destroy / .after (我更喜欢 .after 工作),但是在几乎每个配置中我都会收到如下错误:

return getattr(self.tk, attr)
AttributeError: '_tkinter.tkapp' object has no attribute '_name'

root.after(1000, root.destroy(warnlabel))
TypeError: Tk.destroy() takes 1 positional argument but 2 were given

self.tk.call('wm', 'forget', window)
_tkinter.TclError: wrong # args: should be "wm option window ?arg ...?"

【问题讨论】:

【参考方案1】:

尝试做

root.after(2000, lambda: warnlabel.destroy())

尝试在没有 lambda 的情况下使用它。

还有变化

warnlabel = Label(root, text="MUST ENTER ALL 3").grid(row=1, column=3)

到这里

warnlabel = Label(root, text="MUST ENTER ALL 3")
warnlabel.grid(row=1, column=3)

【讨论】:

这里不需要lambda。你可以使用它,但它是不必要的。 使用 Lambda:Tkinter 回调回溯中的异常(最近一次调用最后一次):文件“C:\Users\BEAST\AppData\Local\Programs\Python\Python310\lib\tkinter_init_.py",第 1921 行,在 call 中 return self.func(*args) File"C:\Users......\Python310\lib\tkinter_init_.py”,第 839 行,在 callit func(*args) 文件“C:\Users\BEAST\PycharmProjects\WebScraping\GUI_Test.py”,第 77 行,在 root.after(2000, lambda: warnlabel.destroy()) #删除警告标签。 AttributeError: 'NoneType' 对象没有属性 'destroy' 没有 lambda:Tkinter 回调 Traceback 中的异常(最近一次调用最后一次):文件“C:\Users\BEAST\AppData\Local\Programs\Python\Python310\lib\tkinter_init_.py",第 1921 行,在 call 中 return self.func(*args) File "C:\Users\BEAST\PycharmProjects\WebScraping\GUI_Test.py",第 77 行,在 Save_KC_Keys root.after(2000, warnlabel.destroy()) #删除警告标签。 AttributeError: 'NoneType' 对象没有属性 'destroy' 哦,对了,这是因为您正在立即执行 .grid() 方法。您正在存储一个非类型变量。 太棒了!那行得通! (啊,伙计,我花了 3 个小时在这个 -_- 上,应该先来这里!)谢谢!

以上是关于Python tkinter 在 2 秒后删除标签的主要内容,如果未能解决你的问题,请参考以下文章

我可以用vue js显示一个<p>标签,但我不能在2秒后删除它[重复]

Python 2.7 Tkinter标签虽然有效但未显示

使用 jquery 在 X 秒后隐藏/删除标签

python-模块-tkinter

从tkinter标签中删除花括号

Python,在标签中的 Tkinter 中显示 openCv 图像