python - 为什么我的进度条可以使用“打印”命令而不是 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 个数字的窗口(而不是一一添加)。我知道这是一个愚蠢的问题,但我真的无法理解!非常感谢!亚历山德罗
解决方案
这是因为 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 编程时需要记住的内容。
推荐阅读
- c# - 如何删除过载弹出窗口
- json - Json 验证自定义错误
- graph-tool - 在图形工具中查找源和目标之间的所有路径,返回边而不是顶点
- r - 如何在并行化代码 R 时释放 RAM
- python-3.x - Do I have to install packages needed each time when I start Google Colab?
- mysql - 在 SQL 中,按 INT 范围分组
- r - 使用 R 中的 shapefile 过滤经纬度点
- docker - docker build 在 Kubernetes 节点中失败
- c++ - 无法从嵌套模板声明字段为抽象类型
- oracle - 在 peoplesoft 中将经典页面链接到流畅页面