簡體   English   中英

進度欄在完成時關閉窗口

[英]Progress bar that closes window when complete

我正在嘗試讓進度條窗口顯示一次,一旦按下按鈕,然后在進度條結束(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()

更好地面向這樣的復雜代碼。 函數使邏輯上更難以分解。

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程序員,所以這可能毫無意義。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM