使用 Frame 的 Tkinter 进度条
Tkinter progess bar using Frame
我在 Tkinter 中有一个进度条,但我可以弄清楚如何在使用 def open
加载文件之前设置最大值(=加载的文件数)
from Tkinter import *
import tkFileDialog
import ttk
class MainWindow(Frame):
def __init__(self):
Frame.__init__(self)
self.master.title("FOO progress bar")
self.grid(sticky=W+N+S+E)
top = self.winfo_toplevel()
top.rowconfigure(0, weight=1)
top.columnconfigure(0, weight=1)
top_frame = Frame(self)
frame_1 = Frame(self)
top_frame.grid(row=0, sticky=W+N+S+E)
frame_1.grid(row=1, sticky=W+N+S+E)
top_frame.grid(row=0, sticky=W+N+S+E)
self.open = Button(top_frame, text="Input file(s)",
command=self.open,
activeforeground="red", width=20)
self.open.grid(row=1, column=0, pady=2, padx=2, sticky=W)
self.progressbar = ttk.Progressbar(top_frame, orient=HORIZONTAL, length=228, mode='determinate')
self.progressbar.grid(row=1, column=1, pady=2, padx=2, sticky=W)
self.process = Button(frame_1, text="process",
command=self.process,
activeforeground="red", width=20)
self.process.grid(row=2, column=0, sticky=W+N+S+E)
def open(self):
self.filename_open = tkFileDialog.askopenfilenames(defaultextension='*.*')
return self.filename_open
def process(self):
for index, image_name in enumerate(self.filename_open.split()):
self.progressbar.step(index)
self.update()
if __name__ == "__main__":
d = MainWindow()
d.mainloop()
您可以通过 configure
更改 maximum
设置。我也修正了两三个错误。
import time
#in __init__
self.progressvar = IntVar()
self.progressbar = ttk.Progressbar(top_frame, orient=HORIZONTAL, length=228, mode='determinate', variable = self.progressvar)
def open(self):
self.filename_open = tkFileDialog.askopenfilenames(defaultextension='*.*')
self.progressvar.set(0)
def process(self):
self.progressbar.configure(maximum = len(self.filename_open) + 0.001) #0.001 needed to avoid progressbar empty at the end
for index, image_name in enumerate(self.filename_open):
self.progressbar.step(1)
self.update_idletasks()
time.sleep(0.5) # replace with the real process function
我在 Tkinter 中有一个进度条,但我可以弄清楚如何在使用 def open
from Tkinter import *
import tkFileDialog
import ttk
class MainWindow(Frame):
def __init__(self):
Frame.__init__(self)
self.master.title("FOO progress bar")
self.grid(sticky=W+N+S+E)
top = self.winfo_toplevel()
top.rowconfigure(0, weight=1)
top.columnconfigure(0, weight=1)
top_frame = Frame(self)
frame_1 = Frame(self)
top_frame.grid(row=0, sticky=W+N+S+E)
frame_1.grid(row=1, sticky=W+N+S+E)
top_frame.grid(row=0, sticky=W+N+S+E)
self.open = Button(top_frame, text="Input file(s)",
command=self.open,
activeforeground="red", width=20)
self.open.grid(row=1, column=0, pady=2, padx=2, sticky=W)
self.progressbar = ttk.Progressbar(top_frame, orient=HORIZONTAL, length=228, mode='determinate')
self.progressbar.grid(row=1, column=1, pady=2, padx=2, sticky=W)
self.process = Button(frame_1, text="process",
command=self.process,
activeforeground="red", width=20)
self.process.grid(row=2, column=0, sticky=W+N+S+E)
def open(self):
self.filename_open = tkFileDialog.askopenfilenames(defaultextension='*.*')
return self.filename_open
def process(self):
for index, image_name in enumerate(self.filename_open.split()):
self.progressbar.step(index)
self.update()
if __name__ == "__main__":
d = MainWindow()
d.mainloop()
您可以通过 configure
更改 maximum
设置。我也修正了两三个错误。
import time
#in __init__
self.progressvar = IntVar()
self.progressbar = ttk.Progressbar(top_frame, orient=HORIZONTAL, length=228, mode='determinate', variable = self.progressvar)
def open(self):
self.filename_open = tkFileDialog.askopenfilenames(defaultextension='*.*')
self.progressvar.set(0)
def process(self):
self.progressbar.configure(maximum = len(self.filename_open) + 0.001) #0.001 needed to avoid progressbar empty at the end
for index, image_name in enumerate(self.filename_open):
self.progressbar.step(1)
self.update_idletasks()
time.sleep(0.5) # replace with the real process function