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

标签 python python-3.x time tkinter

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

相关文章:

java - 日期和时间格式

python - 将列表中的整数乘以列表中的单词

python - 使用 pandas 从 csv 读取日期时间时出错

Python 使用次要 y 轴制作组合条形图和线图

python - 尝试在 python 中安装库时,如何修复构建环境中不可用的设置工具?

java - 网络中的服务器允许测试套接字收集信息

python - 如何从 pandas 的列表中向 Dataframe 添加行?

python - 需要计算连续索引的运行次数

python-3.x - 如何根据 tkinter 列表框中已打乱项目的索引设置选择栏

c - 一年中具有可变开始日和锚定日的周