python - 带进度条的 Tkinter GUI

标签 python tkinter

我有一个简单的 Tk GUI 和一个附加到按钮的功能的漫长过程。当我点击按钮时,我想要一个进度条,就像它开始了一个漫长的过程。

我该怎么做?这是我当前的代码:

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()

如何在该应用程序中放置进度条?

最佳答案

您可以在 tkdocs 找到 ttk.Progressbar

import time
from tkinter import *
from tkinter.ttk import *

tk = Tk()
progress = Progressbar(tk, orient=HORIZONTAL, length=100, mode='determinate')


def bar():
    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 并在另一个线程中运行您的代码。

像这样:

import threading
import time
from tkinter import Button, Tk, HORIZONTAL
from tkinter.ttk import Progressbar

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()

关于python - 带进度条的 Tkinter GUI,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/33768577/

相关文章:

python - 在 tkinter 中保存顶级页面的状态

python - matplotlib:二进制热图

python - MatPlotlib Seaborn 多图格式化

python - 无法在 Django 中上传图片

python - 带有 Tkinter 的 Python 中带有 CheckButtons 的列表框

python - 如何在类中正确使用和定义属性。 tkinter 粘性按钮网格,可单独对功能使用react

python - 单元测试 Django JSON View

python - 通过 Python 从特定的 Outlook 帐户发送电子邮件?

python - 创建一个生成新列表的交互式 Python GUI

Python - 从另一个类调用函数