[英]Python progress bar GUI
我想知道您是否能帮助我。 我已经看到了用于创建进度条GUI的代码,并且正在尝试对其进行一些修改,以便可以将所需的值发送给进度条。 下面是我的代码
import tkinter as tk
from tkinter import ttk
import time
class progress_bar(tk.Tk):
def __init__(self, *args, **kwargs):
tk.Tk.__init__(self, *args, **kwargs)
self.progress = ttk.Progressbar(self, orient="horizontal", length=200, mode="determinate")
self.progress.pack()
self.val = 0
self.maxval = 1
self.progress["maximum"] = 1
def updating(self, val):
self.val = val
self.progress["value"] = self.val
print(self.val)
if self.val == self.maxval:
self.destroy()
def test():
for i in range(0, 101):
time.sleep(0.1)
app.updating(i/100)
app = progress_bar()
app.after(1, test)
app.mainloop()
当我运行代码时,打印消息按预期方式从0-1逐渐增加,但是在创建GUI时,它保持为空,直到程序完成并根据需要关闭为止。 您能告诉我我需要修改什么以便GUI更新吗? 在此先感谢您提供的任何帮助。
您遇到的问题是您的test
功能会阻止tkinter
事件循环。 这意味着即使进度条的value
被更新,进度也永远不会出现在屏幕上(因为直到test
结束才重绘任何内容)。
要解决此问题,您需要摆脱test
中的循环,而应使用tkinter
代码进行重复更新。
这是应该可以使用的test
的修改版本:
def test(i=0):
app.updating(i/100)
if i < 100:
app.after(100, test, i+1)
它不是显式循环,而是每100毫秒重新安排自己的时间。 现在, i
不再是一个循环变量,而是一个自变量,并且每个计划调用都将获得比之前更大的i
值。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.