(对不起,英语不好) 你好!我是编程新手。我在使用“之后”方法时遇到了麻烦,我在使用Tkinter。
因此,我希望一个函数执行一部分代码,然后延迟其余代码,但它只是冻结并立即执行所有操作。
def click1 ():
entered_text=textentry.get()
textentry.delete(0, "end")
try:
rasp1 = inputs[entered_text]
except:
rasp1 = "Hello, " + entered_text + "!"
textentry.destroy()
enter.destroy()
tk.Label(root,
text=entered_text + " <<",
fg="white",
bg="#333333",
#aspect=1000,
justify="left",
font=courier) .grid(column=1, sticky="e")
root.after(3000)
Rasp1 = tk.Message(root,
text=">> " + rasp1,
fg="#00ff00",
bg="#333333",
aspect=800,
justify="left",
font=courier)
Rasp1.grid(column=1, sticky="w")
正如我在其他程序上所见,我试图将回调函数编写为函数,但这会产生错误:
Exception in Tkinter callback
Traceback (most recent call last):
File "C:\Python27\Lib\lib-tk\Tkinter.py", line 1547, in __call__
return self.func(*args)
File "C:\Python27\Lib\lib-tk\Tkinter.py", line 596, in callit
func(*args)
File "C:\create\Jim(grid).exe.py", line 38, in click1
entered_text=textentry.get()
File "C:\Python27\Lib\lib-tk\Tkinter.py", line 2518, in get
return self.tk.call(self._w, 'get')
TclError: invalid command name ".31959040"
答案 0 :(得分:0)
我在猜测您想要什么,但是我认为下面的代码会有所帮助。
您的追随者必须为root.after(3000, callback)
。我已将Rasp1...
代码移到函数do_after
中,执行root.after 3秒后,root会调用它。 after
的要点是它不会延迟GUI中任何内容的执行。它允许GUI的其余部分保持活动状态,以进行文本输入,单击等操作,而程序会延迟开始执行其回调。
import tkinter as tk
def click1 ():
global rasp1
entered_text=textentry.get()
textentry.delete(0, "end")
rasp1 = "Hello, " + entered_text + "!"
textentry.destroy()
enter.destroy()
tk.Label(root,
text=entered_text + " <<",
fg="white",
bg="#333333",
#aspect=1000,
justify="left").grid(row = 2, column=1, sticky="e")
root.after(3000, do_after )
def do_after():
Rasp1 = tk.Message(root,
text=">> " + rasp1,
fg="#00ff00",
bg="#333333",
aspect=800,
justify="left")
Rasp1.grid(row=2, column=0, sticky="w")
root = tk.Tk()
textentry = tk.Entry(root)
textentry.grid()
enter = tk.Button(root, command = click1, text = " Test " )
enter.grid()
root.mainloop()