gpt4 book ai didi

python - Tkinter 上的 time.sleep() 等效项

转载 作者:行者123 更新时间:2023-12-01 04:25:41 25 4
gpt4 key购买 nike

我必须停止循环并在几秒钟后恢复。我尝试使用 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/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com