我必须停止循环并在几秒钟后恢复。我尝试使用after(),但循环不会冻结。当我使用time.sleep()(解决tkinter)时,tkinter会冻结。有另一种方法或函数等效time.sleep()而不冻结。
代码:
for message in listOfMessages:
time.sleep(message.time)
#manipulate message
#change text widget
这将冻结我的tkinter应用程序。
我尝试使用after()但是message.time是一个浮点数:0.5054564到1.5234244。这是随机的。并且支持后只有int。我无法转换为int,因为低数字会产生不同的数字。如果我在int中转换0.52342342:523 ...我丢失了其他42342
这也不行:
def changes(#values):
#manipulate message
#change text widget
for message in listOfMessages:
app.after(message.time, lambda: changes(#values))
还有另一个函数等效time.sleep不冻结tkinter并且与after()不同吗?如果没有,还有另一种方法吗?谢谢你的关注。
答案 0 :(得分:2)
创建模拟:
for message in listOfMessages:
time.sleep(message.time)
change(message)
tkinter
中的:
def update_widget(app, messages):
message = next(messages, None)
if message is None: # end of the loop
return
delay = int(message.time * 1000) # milliseconds
app.after(delay, change, message) # execute body
app.after(delay, update_widget, app, messages) # next iteration
update_widget(app, iter(listOfMessages))
如果您想等到change(message)
完成后再继续循环:
def iterate(message, app, messages):
change(message)
update_widget(app, messages)
def update_widget(app, messages):
message = next(messages, None)
if message is None: # end of the loop
return
delay = int(message.time * 1000) # milliseconds
app.after(delay, iterate, message, app, messages)
update_widget(app, iter(listOfMessages))