完成后关闭窗口的进度条

时间:2017-05-18 08:47:29

标签: python

我尝试按下一个按钮后会显示一个进度条窗口,然后一旦条形结束(3秒)就关闭,但是看起来窗口似乎没有生成完成后,为什么按钮会睡3秒而不是先生成Bar。我怎样才能让它发挥作用?该代码分为3个独立的功能,以便于理解问题。在此先感谢:)

from Tkinter import *
from ttk import Progressbar
from time import sleep

def Generate_Invoice(toplevel):
    Generating_Label=Label(toplevel, text="Please wait while we generate your invoice...")
    progress = Progressbar(toplevel, maximum=100,mode='determinate')
    Generating_Label.pack(side=TOP)
    progress.pack(fill=X)
    progress.start(10)   

def Timer(toplevel):
    sleep(3)
    toplevel.destroy()

def Work():
    toplevel=Toplevel()
    Generate_Invoice(toplevel)
    Timer(toplevel)


window=Tk()
Generate=Button(window, text="Generate invoice",command=Work)
Generate.pack()
window.mainloop()

1 个答案:

答案 0 :(得分:0)

最好像这样对象复杂的代码。功能使逻辑分解变得更加困难。

import ttk
from time import sleep
import Tkinter as tk


class App(tk.Tk):
    def __init__(self, *args, **kwargs):
        tk.Tk.__init__(self, *args, **kwargs)
        self.button = ttk.Button(text="Generate Invoice", command=self.start)
        self.button.pack()
        self.labelText = tk.StringVar()
        self.genLabel = ttk.Label(textvariable=self.labelText)
        self.labelText.set(" ")
        self.genLabel.pack()
        self.progress = ttk.Progressbar(self, orient="horizontal",length=150, mode="determinate")
        self.progress.pack()
        self.pr = 0
        self.prmax = 0

    def increase(self):
        self.pr += 5
        self.progress["value"] = self.pr
        if self.pr < self.prmax:
            self.after(100, self.increase)

    def start(self):
        self.progress["value"] = self.pr
        self.prmax = 100
        self.progress["maximum"] = self.prmax
        self.labelText.set("Generating Invoice")
        self.increase()

app = App()
app.mainloop()

这是基于我现在无法找到的其他人的程序:P并且按我认为你想要的方式工作。 StringVar()用于封装标签文本的更改。 免责声明我不是一个优秀的GUI程序员,所以这可能毫无意义。