使 tkinter 标签在时间后消失 - "NoneType" 对象没有属性 "destroy"

Make tkinter Label disappear after time - "NoneType" Object has no attribute "destroy"

如果以下问题是我这边的超级愚蠢错误,请原谅。我对编码很陌生,尽管这里已经解决了一些类似的问题,但我仍然无法弄清楚,为什么我 运行 进入我的特定代码中的以下错误消息:

Exception in Tkinter callback Traceback (most recent call last):
File "/Library/Frameworks/Python.framework/Versions/3.8/lib/python3.8/tkinter/init.py", line 1883, in call return self.func(*args) File "/Users/Tomasz/Desktop/Code/04_OtherCodes/patch_app/app.py", line 64, in clear_inputs master.after(2000, vis.destroy()) AttributeError: 'NoneType' object has no attribute 'destroy'

基本上我正在尝试编写一个函数,它清除 tkinter 表单中的所有输入并在下面显示一条成功消息。为了能够在以后重用网格来获取更多消息,我必须在一定(短)时间后删除消息——比方说 2 秒。这是我到目前为止得到的:

from tkinter import *
import pandas as pd

master = Tk()
master.title("Patch Organizer")
master.geometry("620x500")
message = ""

### Defining several variables and input Fields in between
### And listing them all in a list input_fields = [entry1, entry2, entry3, etc]


def clear_inputs():
    global input_fields, message
    for field in input_fields:
        field.delete(0, END)

    message = "All clear - let's start all over!"
    vis= Label(master, fg = "green", text= message).grid(row=4,column=1)
    master.after(2000, vis.destroy())

mainloop()

为什么我不能在 tkinters 标签对象上调用 destroy 方法? 也许还有更好的方法?就像调用将消息再次设置回空字符串的函数一样?

非常感谢您的帮助!

干杯 贾克

这样做

vis= Label(master, fg = "green", text= message)
vis.grid(row=4,column=1)

首先你需要单独执行网格方法,然后你需要在命令之前放置 lambda,否则它会立即发生。

from tkinter import *
import pandas as pd

master = Tk()
master.title("Patch Organizer")
master.geometry("620x500")
message = ""

### Defining several variables and input Fields in between
### And listing them all in a list input_fields = [entry1, entry2, entry3, etc]

def clear_inputs(event):
    message =("All clear - let's start all over!")
    vis= Label(master, fg = "green", text= message)
    vis.grid(row=4,column=1)
    master.after(2000, lambda:vis.destroy())

e1 = Entry(master)
e1.grid()
e1.bind("<Return>", clear_inputs)



mainloop()