【问题标题】:Python tkinter removing label after 2 secondsPython tkinter 在 2 秒后删除标签
【发布时间】: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 ...?"

【问题讨论】:

    标签: python tkinter widget label destroy


    【解决方案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 个小时在这个 -_- 上,应该先来这里!)谢谢!
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2016-01-23
    • 2018-05-31
    • 2010-11-21
    • 2015-06-30
    • 2012-08-04
    • 2013-07-24
    相关资源
    最近更新 更多