所以我在customtkinter的应用程序中为我的登录页面制作了一个进度条,我想将进度条停止在100或1,基本上是max
我尝试了很多方法,例如使用 while 循环等,但是当我执行应用程序崩溃/挂起时,我不知道为什么,并且我没有找到用于此目的的任何特定函数,我什至观看了教程,但在任何教程中都没有提到它,我真的很感谢任何人的帮助,
注意:- 我的进度条位于一个函数内,当我在输入用户名和密码后按下登录按钮时,该函数会创建并运行进度条
如果不知道您尝试过什么以及您到底想实现什么目标,就很难为您提供帮助。然而,这里有一个示例,说明如何执行一种不阻塞主循环的循环。 (我想你在循环中使用了类似
sleep()
的东西,这也会导致主循环暂停。这反过来会冻结你的 GUI!)
from customtkinter import CTk, CTkButton, CTkProgressBar
class LoginProgress(CTk):
def __init__(self):
super().__init__()
CTkButton(self, text='Login', command=self.login).pack(pady=10)
# create a progressbar which fills up in 10 steps (by 0.1 each step)
self.prgrs = CTkProgressBar(self, width=200, determinate_speed=5)
self.prgrs.pack(pady=(0, 10), padx=5)
# set it to start at 0
self.prgrs.set(0)
def login(self):
if self.prgrs.get() < 0.9:
# add 0.1 to progress value as determined in determinate_speed
# you could also set a value using self.prgrs.set()
self.prgrs.step()
# recursive call of login after 0.1sec to mimic a loop that is non blocking
self.after(100, self.login)
else:
# finally set the Value to 1 to show a complete progressbar
self.prgrs.set(1)
if __name__ == '__main__':
app = LoginProgress()
app.mainloop()
如果
login
实际上正在做一些耗时的事情,并且您想显示该函数的进度,您可以将 .step()
或 .set()
方法撒入您的实际代码中,然后调用 update()
来强制显示主循环进度条上的值变化:
def actual_login(self):
self.prgrs.set(0.2) # manually set the value to resemble 20% completeness
self.update()
important_stuppf() # do something time consuming
self.prgrs.set(0.5) # set to 50%
self.update()
another_lengthy_task() # do something time consuming
self.prgrs.set(0.8) # set to 80%
self.update()
final_steps_of_function() # do something time consuming
self.prgrs.set(1) # set to complete
self.update()