首页 > 解决方案 > 为什么我的进度条可以使用“打印”命令而不是 tkinter?

问题描述

我想了解为什么这段代码:

import time

for i in range(1,11):
    print(i)
    time.sleep(1)

显示(应该!)从 1 到 10 的数字,每 1 秒显示一次,而这段代码:

from tkinter import *
import time

root = Tk()

for i in range(1,11):
    Label(root, text = i).grid(row=0, column=i-1, padx=5, pady =5)
    time.sleep(1)

root.mainloop()

等待 10 秒,然后显示一个包含 10 个数字的窗口(而不是一一添加)。我知道这是一个愚蠢的问题,但我真的无法理解!非常感谢!亚历山德罗

标签: pythontkinterprintingprogress-barprogress

解决方案


这是因为 time.sleep 函数在 root.mainloop 函数之前。

root.mainloop 是导致窗口出现在屏幕上并开始执行操作的原因。相反,我建议使用 window.after,因为它告诉窗口在屏幕上显示一段时间后运行一个函数。

这是您可以进行的修改的示例(虽然不是很好,但可以):

from tkinter import *
import time

root = Tk()
progress = 0
end = 10

def update_progress():
    global progress
    progress += 1
    Label(root, text = progress).grid(row=0, column=progress-1, padx=5, pady =5)
    if progress < end: root.after(1000,update_progress)  # Tell the window to call this function in 1000ms (1 second)

root.after(0,update_progress)  # Tell the window to run the update_progress function 0ms after now.
root.mainloop()

我建议您查看 gelonida 的答案,以了解为什么您的原始代码不起作用,以及将来使用 GUI 编程时需要记住的内容。


推荐阅读