微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

如何在 Tkinter Python 中显示的 2 条文本消息之间添加延迟?

如何解决如何在 Tkinter Python 中显示的 2 条文本消息之间添加延迟?

所以我的目标是使用单个函数在单击按钮时显示文本消息。然后应该有一个延迟,然后应该显示另一条短信。

该游戏是一个骰子游戏,点击按钮后应显示“Rolling...”。然后过了一会儿,它应该显示一个随机数。

我尝试了 .sleep() 和 .after() 两者都导致我的程序没有显示延迟前文本。这是我的代码

# Imports
import tkinter as tk
from random import randrange
import time

# Global variables
# SIDES is a constant
SIDES = 12

# Functions
def func():
    display["text"] = "Rolling..."
    window.after(2000)
    display["text"] = str(randrange(SIDES) + 1)
    

# Main program loop
window = tk.Tk()

display = tk.Label(window,text="Press the button \nto roll the dice.",width=20,height=3)
button = tk.Button(window,text="Roll",command=func)

display.pack()
button.pack(pady=10)

window.mainloop()

任何帮助将不胜感激!

解决方法

问题是当你在函数中 sleep 时,tkinter 主循环被中断并且屏幕没有更新。 (window.after() 在这里只是一个美化的睡眠)。正确的解决方案是将回调传递给after,这将使其立即返回并稍后调用回调:


def func():
    display["text"] = "Rolling..."
    window.after(2000,lambda: display.__setitem__("text",str(randrange(SIDES) + 1)))

(请注意,对 __setitem__ 的调用是直接的单行 lambda 转换。这不是一个好的设计。)

,

试试:

window.after(2000,lambda: display.config(text=randrange(SIDES) + 1))

而不是:

window.after(2000)
display["text"] = str(randrange(SIDES) + 1)

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 [email protected] 举报,一经查实,本站将立刻删除。