Package SimPy :: Module tkprogressbar |
[hide private]
[frames] | no frames]

# Source Code for Module SimPy.tkprogressbar

     1  from Tkinter import *
     2
     3 -class ProgressBar:
     4 -    def __init__(self, master=None, orientation="horizontal",
     5                   min=0, max=100, width=100, height=18,
     6                   doLabel=1, appearance="sunken",
     7                   fillColor="blue", background="gray",
     8                   labelColor="yellow", labelFont="Verdana",
     9                   labelText="", labelFormat="%d%%",
    10                   value=50, bd=2):
    11          # preserve various values
    12          self.master=master
    13          self.orientation=orientation
    14          self.min=min
    15          self.max=max
    16          self.width=width
    17          self.height=height
    18          self.doLabel=doLabel
    19          self.fillColor=fillColor
    20          self.labelFont= labelFont
    21          self.labelColor=labelColor
    22          self.background=background
    23          self.labelText=labelText
    24          self.labelFormat=labelFormat
    25          self.value=value
    26          self.frame=Frame(master, relief=appearance, bd=bd)
    27          self.canvas=Canvas(self.frame, height=height, width=width, bd=0,
    28                             highlightthickness=0, background=background)
    29          self.scale=self.canvas.create_rectangle(0, 0, width, height,
    30                                                  fill=fillColor)
    31          self.label=self.canvas.create_text(self.canvas.winfo_reqwidth()
    32  / 2,
    33                                             height / 2, text=labelText,
    34                                             anchor="c", fill=labelColor,
    35                                             font=self.labelFont)
    36          self.update()
    37          self.canvas.pack(side='top', fill='x', expand='no')
    38
    39 -    def updateProgress(self, newValue, newMax=None):
    40          if newMax:
    41              self.max = newMax
    42          self.value = newValue
    43          self.update()
    44
    45 -    def update(self):
    46          # Trim the values to be between min and max
    47          value=self.value
    48          if value > self.max:
    49              value = self.max
    50          if value < self.min:
    51              value = self.min
    52          # Adjust the rectangle
    53          if self.orientation == "horizontal":
    54              self.canvas.coords(self.scale, 0, 0,
    55                float(value) / self.max * self.width, self.height)
    56          else:
    57              self.canvas.coords(self.scale, 0,
    58                                 self.height - (float(value) /
    59                                                self.max*self.height),
    60                                 self.width, self.height)
    61          # Now update the colors
    62          self.canvas.itemconfig(self.scale, fill=self.fillColor)
    63          self.canvas.itemconfig(self.label, fill=self.labelColor)
    64          # And update the label
    65          if self.doLabel:
    66              if value:
    67                  if value >= 0:
    68                      pvalue = int((float(value) / float(self.max)) *
    69                                     100.0)
    70                  else:
    71                      pvalue = 0
    72                  self.canvas.itemconfig(self.label, text=self.labelFormat
    73                                           % pvalue)
    74              else:
    75                  self.canvas.itemconfig(self.label, text='')
    76          else:
    77              self.canvas.itemconfig(self.label, text=self.labelFormat %
    78                                     self.labelText)
    79          self.canvas.update_idletasks()
    80