gpt4 book ai didi

python - 在确定模式下使用 ttk.Progressbar

转载 作者:太空宇宙 更新时间:2023-11-03 18:58:20 24 4
gpt4 key购买 nike

我试图让进度条出现在顶级小部件上,然后每隔几秒逐渐增加直到完成。

当我单击“开始”时,进度条小部件出现之前有几秒钟的延迟。当它出现时,进度条根本不会增加。

这是我迄今为止尝试过的:

class MainUI:
def __init__(self, parent):
self.parent = parent
self.counter = IntVar()
self.main_container = Frame(self.parent)
self.main_container.pack()
self.btn_start = Button(self.main_container, command=self.btn_start_click)
self.btn_start.configure(
text="Start", background="Grey",
padx=50
)
self.btn_start.pack(side=LEFT)

def progress_bar(self):
self.pbar_top = Toplevel(self.main_container)
self.download_label = Label(
self.pbar_top,
text="Download Bar"
)
self.download_label.pack(side=TOP)

self.download_bar = ttk.Progressbar(
self.pbar_top, orient="horizontal",
length=400, mode="determinate",
variable=self.counter, maximum=5
)
self.download_bar.pack(side=TOP)

def btn_start_click(self):
self.progress_bar()
for i in range(4):
self.counter = i
time.sleep(1)

root = Tk()
root.title("Progress Bar Test")
main_ui = MainUI(root)
root.mainloop()

我发现注释掉 btn_start_click 中的 for 循环会导致单击“开始”后立即出现进度条。但是,与以前一样,实际栏不会增加。

有人可以指出我做错了什么吗?

最佳答案

问题是您在与 Tkinter 代码相同的线程中调用 time.sleep(1) 。它会使您的 GUI 无响应,直到任务(在本例中为对 btn_start_click 的调用)完成。为了解决这个问题,您可以启动一个执行该函数的新线程,并使用像Queue这样的同步对象来更新GUI线程中的进度条。 。 This is a working example我写了一个类似的问题。

此外,您应该调用 self.counter.set(i) 而不是 self.counter = i 来更新 IntVar 的值。另一个更明确的解决方案是带有适当增量的 self.download_bar.step()

关于python - 在确定模式下使用 ttk.Progressbar,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/16722863/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com