📄 progressbar.py
字号:
#!/usr/bin/python# -*- coding: iso-8859-1 -*-"""A basic widget for showing the progressbeing made in a task."""from Tkinter import *class ProgressBar: def __init__(self, master=None, orientation="horizontal", min=0, max=100, width=150, height=18, doLabel=1, appearance="sunken", fillColor="slateblue", background="gray", labelColor="black", labelFont="Verdana 8", labelText="", labelFormat="%d %%", value=50, bd=0): # preserve various values self.master=master self.orientation=orientation self.min=min self.max=max self.width=width self.height=height self.doLabel=doLabel self.fillColor=fillColor self.labelFont= labelFont self.labelColor=labelColor self.background=background self.labelText=labelText self.labelFormat=labelFormat self.value=value self.frame=Frame(master, relief=appearance, bd=bd) self.canvas=Canvas(self.frame, height=height, width=width, bd=0, highlightthickness=0, background=background) self.scale=self.canvas.create_rectangle(0, 0, width, height, fill=fillColor) self.label=self.canvas.create_text(self.canvas.winfo_reqwidth() / 2, height / 2, text=labelText, anchor="c", fill=labelColor, font=self.labelFont) self.update() self.canvas.pack(side='top', fill='x', expand='no') def updateProgress(self, newValue, newMax=None): if newMax: self.max = newMax self.value = newValue self.update() def update(self): # Trim the values to be between min and max value=self.value if value > self.max: value = self.max if value < self.min: value = self.min # Adjust the rectangle if self.orientation == "horizontal": self.canvas.coords(self.scale, 0, 0, float(value) / self.max * self.width, self.height) else: self.canvas.coords(self.scale, 0, self.height - (float(value) / self.max*self.height), self.width, self.height) # Now update the colors self.canvas.itemconfig(self.scale, fill=self.fillColor) self.canvas.itemconfig(self.label, fill=self.labelColor) # And update the label if self.doLabel: if value: if value >= 0: pvalue = int((float(value) / float(self.max)) * 100.0) else: pvalue = 0 self.canvas.itemconfig(self.label, text=self.labelFormat % pvalue) else: self.canvas.itemconfig(self.label, text='') else: self.canvas.itemconfig(self.label, text=self.labelFormat % self.labelText) self.canvas.update_idletasks()if __name__ == '__main__': maximum = 5000 tk = Tk() frame = Frame(tk) frame.pack(expand=YES, fill=BOTH) Label(frame, text='ProgressBar').pack(pady=10) p = ProgressBar(frame, bd=2, height=25, labelColor='white') p.frame.pack(padx=20, pady=20) Button (frame, text="button", command=tk.destroy).pack(pady=10) p.updateProgress(0) p.frame.update_idletasks() for x in range(maximum): p.updateProgress(newValue=x, newMax=maximum) p.updateProgress(0) tk.mainloop()
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -