进度条停在Max处,customtkinter

问题描述 投票:0回答:1

所以我在customtkinter的应用程序中为我的登录页面制作了一个进度条,我想将进度条停止在100或1,基本上是max

我尝试了很多方法,例如使用 while 循环等,但是当我执行应用程序崩溃/挂起时,我不知道为什么,并且我没有找到用于此目的的任何特定函数,我什至观看了教程,但在任何教程中都没有提到它,我真的很感谢任何人的帮助,

注意:- 我的进度条位于一个函数内,当我在输入用户名和密码后按下登录按钮时,该函数会创建并运行进度条

python user-interface customtkinter
1个回答
0
投票

如果不知道您尝试过什么以及您到底想实现什么目标,就很难为您提供帮助。然而,这里有一个示例,说明如何执行一种不阻塞主循环的循环。 (我想你在循环中使用了类似

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()
© www.soinside.com 2019 - 2024. All rights reserved.