import customtkinter as CTK
class App(CTK.CTk):
def __init__(self):
super().__init__()
self.bar = CTK.CTkProgressBar(master=self.checkbox, orientation='horizontal', mode='determinate')
self.bar.grid(row=10, column=0, pady=10, padx=20, sticky="n")
def test(self):
for x in range(500):
return x**2
我希望当我想要运行测试功能时(通过我已经制作的按钮,它本身可以正常工作),栏会启动,当它结束时它会停止。虽然最好的是如果有一种方法可以在 UI 本身中使用 tqdm 进度条来代替 tkinter 进度条?
我尝试添加 self.bar.start() 并在函数的开始/结束处停止,但似乎不起作用。它仅在函数本身完成后运行。
最佳答案
除了启动和停止进度条之外,您还需要在每次迭代时更新它。 documentation指出条形图从 0 到 1,因此您需要想出一种方法来测量增量,然后将它们重新调整为所需范围之间的 float 。
您还需要在小部件声明后立即设置进度条的初始值,因为默认值为 0.5(半程)。
此外,您需要使用 update_idletasks()
方法让进度条实际移动到每个步骤。否则,它将等待任务执行完毕,然后更新值。
import customtkinter as CTK
class App(CTK.CTk):
def __init__(self):
super().__init__()
self.bar = CTK.CTkProgressBar(master=self.checkbox,
orientation='horizontal',
mode='determinate')
self.bar.grid(row=10, column=0, pady=10, padx=20, sticky="n")
# Set default starting point to 0
self.bar.set(0)
def test(self):
n = 500
iter_step = 1/n
progress_step = iter_step
self.bar.start()
for x in range(500):
self.bar.set(progress_step)
progress_step += iter_step
self.update_idletasks()
self.bar.stop()
现在您只需要包含一个按钮或其他一些对象来初始化您的函数。
关于 return 语句,我不建议这样做。您也可以将每个元素附加到列表中,并在进度条结束时将其返回。
希望这有帮助。
关于python-3.x - 如何在customtkinter上添加进度条?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/74686881/