我尝试按下一个按钮后会显示一个进度条窗口,然后一旦条形结束(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()
答案 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程序员,所以这可能毫无意义。