不能让python代码暂停五秒钟

时间:2021-05-03 17:15:08

标签: python tkinter wait sleep pause

我希望在绘制第一行和第二行之间有 5 秒的停顿。但是当我取消注释它们时,这些注释选项都不起作用。

from tkinter import *
import time

window = Tk()
window.title("window title")
frame = Frame(window)
frame.grid()
    
canvas = Canvas(frame, bg = "yellow", height = 400, width = 600)
canvas.pack()

canvas.create_line(20, 10, 80, 30)
# window.after(5000)
# time.sleep(5)
canvas.create_line(50, 50, 100, 200)

window.mainloop()

任何帮助表示赞赏。谢谢。

2 个答案:

答案 0 :(得分:0)

您不能暂停主循环,即使可以,您的 TopLevel 窗口也是根窗口的子级,因此它会暂停。您可以尝试在 top_level 上使用grab_set() 方法。或者,您可以在单个 for 循环中禁用多个小部件,方法是通过它们的父级访问它们。

答案 1 :(得分:0)

Tkinter 是单线程的,这意味着它一次只能做一件事。 time.sleep(5)window.after(5000) 都会导致整个应用程序休眠五秒钟。它在睡觉时不能做任何其他事情。这包括它无法刷新窗口或窗口中的任何内容。

您需要做的是使用 after 将第二条线的绘制安排在未来五秒,这允许 mainloop 在此期间运行。这个特定示例中最简单的修改是这样的:

canvas.create_line(20, 10, 80, 30)
window.after(5000, canvas.create_line, 50, 50, 100, 100)

window.mainloop()

这将创建第一条线,安排绘制第二条线,然后启动事件循环。事件循环启动后,tkinter 将绘制窗口并绘制第一行。大约五秒钟后,它将使用给定的参数调用 canvas.create_line

相关问题