在用Python运行基于tkinter的程序4-5秒后,它会冻结。在我的程序中,我没有使用任何睡眠()语句。请看下面的代码。
def sleeper(tim):
print("sleep Timer")
tex.update_idletasks()
def countdown():#countdown logic
global key
global t
global timeformatToBePub
timeformat=""
if (key==0):
mins, secs = divmod(t, 60)
timeformat = '{:02d}{:02d}'.format(mins, secs)
timeformatToBePub = '{:02d}:{:02d}'.format(mins, secs)
print(timeformat, end='\n')
###sevenSeg(list(timeformat))#pass list of time characters as argument
top.after(1000,sleeper(1))
#tex.update_idletasks()
#top.update_idletasks()
t -= 1
tex.delete('1.0',tk.END)
#top.after(1000,sleeper(1))
tex.insert(tk.END,"Self destruction mode activated\n"+timeformatToBePub+"\n")
if ((key==0) and(timeformat=="0001")):
tex.delete('1.0',tk.END)
top.after(1000,sleeper(1))
tex.insert(tk.END,"At least you tried...\n Game over!\n Type restart to restart the game")
PlaySound(1)
publish("dev1", ("dev1,"+answers_list[0]+","+answers_list[1])+","+timeformatToBePub)
top.after(1000,sleeper(1))
restarter()#restarts the program
top.after(2000,countdown())几秒钟后程序没有响应的原因是什么?
发布于 2017-09-15 15:58:34
可能还有其他问题,但一个突出的问题是您滥用了after。之后需要一个可调用的。
考虑这一行代码:
top.after(1000,sleeper(1))它在功能上与此相同:
sleeper(1)
top.after(1000, None)..。它在功能上也与此相同:
sleeper(1)
sleep(1)要正确使用after,必须传递对函数的引用。可以通过在对after的调用中包含这些参数来传递其他参数。例如:
top.after(1000, sleeper, 1)https://stackoverflow.com/questions/46243388
复制相似问题