我必须停止循环并在几秒钟后恢复。我尝试使用 after(),但循环没有卡住。当我使用 time.sleep() (解决 tkinter)时,tkinter 卡住。有另一种方法或等效的函数 time.sleep() 而不卡住。
代码:
for message in listOfMessages:
time.sleep(message.time)
#manipulate message
#change text widget
这将卡住我的 tkinter 应用程序。
我尝试使用 after() 但 message.time 是一个 float :0.5054564 到 1.5234244。这是随机的。而after仅支持int。我无法转换为 int,因为数字越小就会有所不同。如果我将 0.52342342 转换为 int: 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() 不同?如果没有,还有其他方法吗?感谢您的关注。
最佳答案
创建一个类似的:
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))
关于python - Tkinter 上的 time.sleep() 等效项,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/33175457/