Tkinter GUI与进度栏

发布于 2021-01-29 15:22:47

我在按钮上附加了一个简单的TK gui和一个漫长的过程,并且单击按钮时需要一个进度条。我想要一个进度条,我单击按钮,就像它启动包含许多代码行的长proc一样

我怎样才能做到这一点?这里的代码:

from tkinter import Button, Tk, HORIZONTAL

from tkinter.ttk import Progressbar
import time


class MonApp(Tk):
    def __init__(self):
        super().__init__()


        bt1 = Button(self, text='Traitement', command=self.traitement)
        bt1.grid()
        self.progress = Progressbar(self, orient=HORIZONTAL,length=100,  mode='indeterminate')
        self.progress.grid()
        self.progress.grid_forget()


    def traitement(self):
        self.progress.grid()
        self.progress.start()
        time.sleep(15) 
        ## Just like you have many, many code lines...

        self.progress.stop()

if __name__ == '__main__':

    app = MonApp()
    app.mainloop()

我已经尝试了很多东西,但是我还没有找到方法。

如何在该应用中放置进度栏?

关注者
0
被浏览
42
1 个回答
  • 面试哥
    面试哥 2021-01-29
    为面试而生,有面试问题,就找面试哥。

    您可以ttk.Progressbartkdocs中找到

    from tkinter import *
    from tkinter.ttk import *
    
    tk=Tk()
    progress=Progressbar(tk,orient=HORIZONTAL,length=100,mode='determinate')
    
    def bar():
        import time
        progress['value']=20
        tk.update_idletasks()
        time.sleep(1)
        progress['value']=50
        tk.update_idletasks()
        time.sleep(1)
        progress['value']=80
        tk.update_idletasks()
        time.sleep(1)
        progress['value']=100
    
    progress.pack()
    Button(tk,text='foo',command=bar).pack()
    mainloop()
    

    最好threading在另一个线程中使用和运行代码。

    像这样:

    from tkinter import Button, Tk, HORIZONTAL
    
    from tkinter.ttk import Progressbar
    import time
    import threading
    
    class MonApp(Tk):
        def __init__(self):
            super().__init__()
    
    
            self.btn = Button(self, text='Traitement', command=self.traitement)
            self.btn.grid(row=0,column=0)
            self.progress = Progressbar(self, orient=HORIZONTAL,length=100,  mode='indeterminate')
    
    
        def traitement(self):
            def real_traitement():
                self.progress.grid(row=1,column=0)
                self.progress.start()
                time.sleep(5)
                self.progress.stop()
                self.progress.grid_forget()
    
                self.btn['state']='normal'
    
            self.btn['state']='disabled'
            threading.Thread(target=real_traitement).start()
    
    if __name__ == '__main__':
    
        app = MonApp()
        app.mainloop()
    


知识点
面圈网VIP题库

面圈网VIP题库全新上线,海量真题题库资源。 90大类考试,超10万份考试真题开放下载啦

去下载看看