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