| 12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667686970717273747576777879 |
- """
- A basic widget for showing the progress being made in a task.
- """
- from TkGlobal import *
- class ProgressBar:
- def __init__(self, master=None, orientation="horizontal",
- min=0, max=100, width=100, height=18,
- doLabel=1, appearance="sunken",
- fillColor="blue", background="gray",
- labelColor="yellow", labelFont="Verdana",
- labelText="", labelFormat="%d%%",
- value=50, bd=2):
- # 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:
- value = 0
- self.canvas.itemconfig(self.label,
- text=self.labelFormat % value)
- else:
- self.canvas.itemconfig(self.label, text='')
- else:
- self.canvas.itemconfig(self.label,
- text=self.labelFormat % self.labelText)
- self.canvas.update_idletasks()
|