Пример #1
0
class Painter:
	def __init__(self, window):
		self.population = Population()
		self.initWidgets(window)
		
	def initWidgets(self, window):
		self.targetPhoto = ImageTk.PhotoImage(targetImage)
		self.targetCanvas = Canvas(window, width=config.PIC_W, height=config.PIC_W)
		self.targetCanvas.create_image(config.PIC_W/2, config.PIC_H/2, image=self.targetPhoto)
		self.targetCanvas.pack(side='left')
		self.bestCanvas = Canvas(window, width=config.PIC_W, height=config.PIC_H)
		self.bestCanvas.pack(side='left')
		self.currentCanvas = Canvas(window, width=config.PIC_W, height=config.PIC_H)
		self.currentCanvas.pack(side='left')
	
	def update(self):
		if self.population.evolve():
			self.bestImage = ImageTk.PhotoImage(self.population.bestArtist().image)
			self.bestCanvas.create_image(config.PIC_W/2, config.PIC_H/2, image=self.bestImage)
			self.bestCanvas.update_idletasks()
		else:
			self.currentImage = ImageTk.PhotoImage(self.population.artist.image)
			self.currentCanvas.create_image(config.PIC_W/2, config.PIC_H/2, image=self.currentImage)
			self.currentCanvas.update_idletasks()
			self.population.unevolve()

		root.after(0, self.update)
Пример #2
0
class Painter:
    def __init__(self, window):
        self.population = Population()
        self.initWidgets(window)

    def initWidgets(self, window):
        self.targetPhoto = ImageTk.PhotoImage(targetImage)
        self.targetCanvas = Canvas(window,
                                   width=config.PIC_W,
                                   height=config.PIC_W)
        self.targetCanvas.create_image(config.PIC_W / 2,
                                       config.PIC_H / 2,
                                       image=self.targetPhoto)
        self.targetCanvas.pack(side='left')
        self.bestCanvas = Canvas(window,
                                 width=config.PIC_W,
                                 height=config.PIC_H)
        self.bestCanvas.pack(side='left')
        self.currentCanvas = Canvas(window,
                                    width=config.PIC_W,
                                    height=config.PIC_H)
        self.currentCanvas.pack(side='left')

    def update(self):
        if self.population.evolve():
            self.bestImage = ImageTk.PhotoImage(
                self.population.bestArtist().image)
            self.bestCanvas.create_image(config.PIC_W / 2,
                                         config.PIC_H / 2,
                                         image=self.bestImage)
            self.bestCanvas.update_idletasks()
        else:
            self.currentImage = ImageTk.PhotoImage(
                self.population.artist.image)
            self.currentCanvas.create_image(config.PIC_W / 2,
                                            config.PIC_H / 2,
                                            image=self.currentImage)
            self.currentCanvas.update_idletasks()
            self.population.unevolve()

        root.after(0, self.update)
Пример #3
0
class Painter:
	def __init__(self, window):
		self.population = Population(Settings.populationSize, Settings.polyCount, Settings.vertexCount, targetImage)
		self.targetPhoto = ImageTk.PhotoImage(targetImage)
		self.initWidgets(window)
		
	def initWidgets(self, window):
		self.targetCanvas = Canvas(window, width=SIZE, height=SIZE)
		self.targetCanvas.create_image(SIZE/2, SIZE/2, image=self.targetPhoto)
		self.targetCanvas.pack(side='left')
		self.bestCanvas = Canvas(window, width=SIZE, height=SIZE)
		self.bestCanvas.pack(side='left')
	
	def update(self):
		if self.population.evolve():
			print "Cycles", self.population.cycles
			print "Improvements", self.population.improvements
			image = ImageTools.imageFromDna(self.population.artists[0])
			self.bestImage = ImageTk.PhotoImage(ImageTools.imageFromDna(self.population.artists[0]))
			self.bestCanvas.create_image(SIZE/2, SIZE/2, image=self.bestImage)
			self.bestCanvas.update_idletasks()
		root.after(0, self.update)
Пример #4
0
class SkeletonWindow:
     def __init__(self, root, objs, classes):
          self.objs = objs
          self.classes = classes
          self.can = Canvas(root, width=1920, height=1080)
          self.can.create_line(0, 0, 50,50, fill='black')
          self.can.pack()
          self.alpha = 100
        

               
        
     def draw(self):
          data = self.objs['positions']
          self.can.delete(ALL)
        
          num = 0
          for skel in data:
               num+=1
            
               color = ''
            
               if num == 1: color = 'green'
               if num == 2: color = 'blue'
               if num == 3: color = 'red'
               if num == 4: color = 'orange'
               if num == 5: color = 'pink'
               if num == 6: color = 'black'
            
               #head
               self.can.create_oval(
                    (
                         ( skel['head']['x'] - 50),
                         ( skel['head']['y'] ),
                         ( skel['head']['x'] + 50),
                         ( skel['head']['y'] + 50)
                    ), fill=color
               )
               #shoulders
               self.can.create_line(
                    (
                         skel['shoulder_left']['x'],
                         skel['shoulder_left']['y'],
                         skel['shoulder_center']['x'],
                         skel['shoulder_center']['y'],
                    ), fill=color
               )
            
               self.can.create_line(
                    (
                         skel['shoulder_center']['x'],
                         skel['shoulder_center']['y'],
                         skel['shoulder_right']['x'],
                         skel['shoulder_right']['y'],
                    ), fill=color
               )
               
               #eldows
               self.can.create_line(
                    (
                         skel['elbow_left']['x'],
                         skel['elbow_left']['y'],
                         skel['shoulder_left']['x'],
                         skel['shoulder_left']['y'],
                    ), fill=color
               )
               self.can.create_line(
                    (
                         skel['elbow_right']['x'],
                         skel['elbow_right']['y'],
                         skel['shoulder_right']['x'],
                         skel['shoulder_right']['y'],
                    ), fill=color
               )
               #wrist
               self.can.create_line(
                    (
                         skel['wrist_left']['x'],
                         skel['wrist_left']['y'],
                         skel['elbow_left']['x'],
                         skel['elbow_left']['y'],
                    ), fill=color
               )
               self.can.create_line(
                    (
                         skel['wrist_right']['x'],
                         skel['wrist_right']['y'],
                         skel['elbow_right']['x'],
                         skel['elbow_right']['y'],
                    ), fill=color
               )
               #hand
               self.can.create_line(
                    (
                         skel['hand_left']['x'],
                         skel['hand_left']['y'],
                         skel['wrist_left']['x'],
                         skel['wrist_left']['y'],
                    ), fill=color
               )
               self.can.create_line(
                    (
                         skel['hand_right']['x'],
                         skel['hand_right']['y'],
                         skel['wrist_right']['x'],
                         skel['wrist_right']['y'],
                    ), fill=color
               )
               #hips
               self.can.create_line(
                    (
                         skel['hip_left']['x'],
                         skel['hip_left']['y'],
                         skel['hip_center']['x'],
                         skel['hip_center']['y'],
                    ), fill=color
               )
               self.can.create_line(
                    (
                         skel['hip_center']['x'],
                         skel['hip_center']['y'],
                         skel['hip_right']['x'],
                         skel['hip_right']['y'],
                    ), fill=color
               )
               #spine
               self.can.create_line(
                    (
                         skel['spine']['x'],
                         skel['spine']['y'],
                         skel['hip_center']['x'],
                         skel['hip_center']['y'],
                    ), fill=color
               )
               self.can.create_line(
                    (
                         skel['spine']['x'],
                         skel['spine']['y'],
                         skel['shoulder_center']['x'],
                         skel['shoulder_center']['y'],
                    ), fill=color
               )
               #hips to knees
               self.can.create_line(
                    (
                         skel['hip_left']['x'],
                         skel['hip_left']['y'],
                         skel['knee_left']['x'],
                         skel['knee_left']['y'],
                    ), fill=color
               )
               self.can.create_line(
                    (
                         skel['hip_right']['x'],
                         skel['hip_right']['y'],
                         skel['knee_right']['x'],
                         skel['knee_right']['y'],
                    ), fill=color
               )
               #ankle to knees
               self.can.create_line(
                    (
                         skel['ankle_left']['x'],
                         skel['ankle_left']['y'],
                         skel['knee_left']['x'],
                         skel['knee_left']['y'],
                    ), fill=color
               )
               self.can.create_line(
                    (
                         skel['ankle_right']['x'],
                         skel['ankle_right']['y'],
                         skel['knee_right']['x'],
                         skel['knee_right']['y'],
                    ), fill=color
               )
               #ankle to foot
               self.can.create_line(
                    (
                         skel['ankle_left']['x'],
                         skel['ankle_left']['y'],
                         skel['foot_left']['x'],
                         skel['foot_left']['y'],
                    ), fill=color
               )
               self.can.create_line(
                    (
                         skel['ankle_right']['x'],
                         skel['ankle_right']['y'],
                         skel['foot_right']['x'],
                         skel['foot_right']['y'],
                    ), fill=color
               )
            
            
          self.can.update_idletasks()
        
        
        
        
        
        
        
        
        
        
        
        
        
        
        
            
Пример #5
0
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=0, 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:
                    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()
Пример #6
0
class SkeletonWindow:
    def __init__(self, root, objs, classes):
        self.objs = objs
        self.classes = classes
        self.can = Canvas(root, width=1920, height=1080)
        self.can.create_line(0, 0, 50, 50, fill='black')
        self.can.pack()
        self.alpha = 100

    def draw(self):
        data = self.objs['positions']
        self.can.delete(ALL)

        num = 0
        for skel in data:
            num += 1

            color = ''

            if num == 1: color = 'green'
            if num == 2: color = 'blue'
            if num == 3: color = 'red'
            if num == 4: color = 'orange'
            if num == 5: color = 'pink'
            if num == 6: color = 'black'

            #head
            self.can.create_oval(
                ((skel['head']['x'] - 50), (skel['head']['y']),
                 (skel['head']['x'] + 50), (skel['head']['y'] + 50)),
                fill=color)
            #shoulders
            self.can.create_line((
                skel['shoulder_left']['x'],
                skel['shoulder_left']['y'],
                skel['shoulder_center']['x'],
                skel['shoulder_center']['y'],
            ),
                                 fill=color)

            self.can.create_line((
                skel['shoulder_center']['x'],
                skel['shoulder_center']['y'],
                skel['shoulder_right']['x'],
                skel['shoulder_right']['y'],
            ),
                                 fill=color)

            #eldows
            self.can.create_line((
                skel['elbow_left']['x'],
                skel['elbow_left']['y'],
                skel['shoulder_left']['x'],
                skel['shoulder_left']['y'],
            ),
                                 fill=color)
            self.can.create_line((
                skel['elbow_right']['x'],
                skel['elbow_right']['y'],
                skel['shoulder_right']['x'],
                skel['shoulder_right']['y'],
            ),
                                 fill=color)
            #wrist
            self.can.create_line((
                skel['wrist_left']['x'],
                skel['wrist_left']['y'],
                skel['elbow_left']['x'],
                skel['elbow_left']['y'],
            ),
                                 fill=color)
            self.can.create_line((
                skel['wrist_right']['x'],
                skel['wrist_right']['y'],
                skel['elbow_right']['x'],
                skel['elbow_right']['y'],
            ),
                                 fill=color)
            #hand
            self.can.create_line((
                skel['hand_left']['x'],
                skel['hand_left']['y'],
                skel['wrist_left']['x'],
                skel['wrist_left']['y'],
            ),
                                 fill=color)
            self.can.create_line((
                skel['hand_right']['x'],
                skel['hand_right']['y'],
                skel['wrist_right']['x'],
                skel['wrist_right']['y'],
            ),
                                 fill=color)
            #hips
            self.can.create_line((
                skel['hip_left']['x'],
                skel['hip_left']['y'],
                skel['hip_center']['x'],
                skel['hip_center']['y'],
            ),
                                 fill=color)
            self.can.create_line((
                skel['hip_center']['x'],
                skel['hip_center']['y'],
                skel['hip_right']['x'],
                skel['hip_right']['y'],
            ),
                                 fill=color)
            #spine
            self.can.create_line((
                skel['spine']['x'],
                skel['spine']['y'],
                skel['hip_center']['x'],
                skel['hip_center']['y'],
            ),
                                 fill=color)
            self.can.create_line((
                skel['spine']['x'],
                skel['spine']['y'],
                skel['shoulder_center']['x'],
                skel['shoulder_center']['y'],
            ),
                                 fill=color)
            #hips to knees
            self.can.create_line((
                skel['hip_left']['x'],
                skel['hip_left']['y'],
                skel['knee_left']['x'],
                skel['knee_left']['y'],
            ),
                                 fill=color)
            self.can.create_line((
                skel['hip_right']['x'],
                skel['hip_right']['y'],
                skel['knee_right']['x'],
                skel['knee_right']['y'],
            ),
                                 fill=color)
            #ankle to knees
            self.can.create_line((
                skel['ankle_left']['x'],
                skel['ankle_left']['y'],
                skel['knee_left']['x'],
                skel['knee_left']['y'],
            ),
                                 fill=color)
            self.can.create_line((
                skel['ankle_right']['x'],
                skel['ankle_right']['y'],
                skel['knee_right']['x'],
                skel['knee_right']['y'],
            ),
                                 fill=color)
            #ankle to foot
            self.can.create_line((
                skel['ankle_left']['x'],
                skel['ankle_left']['y'],
                skel['foot_left']['x'],
                skel['foot_left']['y'],
            ),
                                 fill=color)
            self.can.create_line((
                skel['ankle_right']['x'],
                skel['ankle_right']['y'],
                skel['foot_right']['x'],
                skel['foot_right']['y'],
            ),
                                 fill=color)

        self.can.update_idletasks()
Пример #7
0
class  TkProgessBar(Frame):
    """
    TkListboxMulticolumn component which can display multi-sortable listbox
    """

    def __init__(self, master, cnf={}, **kw):
        """
        Construct a listbox widget with one or many column and label field for header

        Valid resource names: background, bd, bg, borderwidth, class, colormap,
        fg, font, foreground, height, highlightbackground,
        """
        Frame.__init__(self, master)
        self._value = kw.get('value', 0.0)

        # Create canvas for drawing in
        self._canvas = Canvas(
            self,
            bg=kw.get('bg', 'white'),
            width=kw.get('width', 300),
            height=kw.get('height', 20),
            relief=kw.get('relief', 'sunken'),
            border=kw.get('border', 1)
        )
        self._canvas.pack(fill='both', expand='yes')
        # Drawing a rectangle
        self._rect = self._canvas.create_rectangle(
            0,
            0,
            0,
            self._canvas.winfo_reqheight(),
            fill=kw.get('fillcolor', 'blue'),
            width=0
        )
        # Drawing a text area
        self._text = self._canvas.create_text(
            self._canvas.winfo_reqwidth()/2,
            self._canvas.winfo_reqheight()/2,
            text='',
            fill=kw.get('textcolor', 'gray')
        )
        self.bind('<Configure>', self._update_coords)

    def _update_coords(self, event):
        '''Updates the position of the text and rectangle inside the canvas when the size of
        the widget gets changed.'''
        # looks like we have to call update_idletasks() twice to make sure
        # to get the results we expect
        self._canvas.update_idletasks()
        self._canvas.coords(self._text, self._canvas.winfo_width()/2, self._canvas.winfo_height()/2)
        self._canvas.coords(self._rect, 0, 0, self._canvas.winfo_width()*self._value, self._canvas.winfo_height())
        self._canvas.update_idletasks()

    def get(self, first, last=None):
        """
        return percent and text value
        """
        return self._value, self._canvas.itemcget(self._text, 'text')

    def set(self, value=0.0, text=None):
        '''
        Set different values.
        '''
        #make the value failsafe:
        if value < 0.0:
            value = 0.0
        elif value > 1.0:
            value = 1.0
        self._value = value
        if text == None:
            #if no text is specified use the default percentage string:
            text = str(int(round(100 * value))) + ' %'
        self._canvas.coords(self._rect, 0, 0, self._canvas.winfo_width()*value, self._canvas.winfo_height())
        self._canvas.itemconfigure(self._text, text=text)
        self._canvas.update_idletasks()
Пример #8
0
class Grid(Frame):

  #Establishes connection to server and defines
  #local variables
  def __init__(self, parent):
    self.sock = socket.socket()
    self.host = ''
    self.buf = 1024
    self.port = 8888
    self.sock.connect((self.host, self.port))

    self.purple = '#130d38'
    self.green = '#239d60'

    self.sock.send('Let me come play!')
    self.message = self.sock.recv(self.buf)
    if self.message:
        print 'Client got:', self.message
        self.icon = self.message

    Frame.__init__(self, parent, background='white')
    self.parent = parent

    self.dimension = 100
    self.cells = {}
    self.used = list()
    for i in range(9):
        self.used.append('n')
    self.lastTimestamp = 0

    self.initUI()

  #Sets up the GUI
  def initUI(self):
    self.parent.title('Tic-Tac-Toe')
    self.pack(fill=BOTH, expand=1)

    self.canvas = Canvas(self)
    for row in range(3):
      for column in range(3):
        x1 = column*self.dimension
        y1 = row*self.dimension
        x2 = x1 + self.dimension
        y2 = y1 + self.dimension
        self.cells[row, column] = self.canvas.create_rectangle(x1, y1, x2, y2, outline=self.purple)
        self.clickId = self.canvas.bind('<ButtonRelease-1>', self.cellClick)

    self.canvas.pack(fill=BOTH, expand=1)

    if self.icon == 'O':
      self.recvMove()

  #Responds to click on a cell
  def cellClick(self, event):
    print 'click'
    row = event.y/self.dimension
    column = event.x/self.dimension
    print ('%d %d' %(row, column))
    self.sendMove(3*row + column)

  #Sends move to server
  def sendMove(self, index):
    print 'sending'
    self.sock.send('%d %s' %(index, self.icon))
    info = self.sock.recv(self.buf).split()
    print 'Client received:', info
    index = int(info[0])
    self.update(index/3, index%3, info[1], info[2])

  #Receives move from server
  def recvMove(self):
    print 'listening'
    info = self.sock.recv(self.buf).split()
    print 'Client received:', info
    index = int(info[0])
    self.update(index/3, index%3, info[1], info[2])

  #Updates data and interface after receiving information
  def update(self, row, column, icon, timestamp):
    if float(timestamp) - self.lastTimestamp > 2:
      x = column*self.dimension + self.dimension/2
      y = row*self.dimension + self.dimension/2

      if self.used[3*row + column] == 'n':
        self.canvas.create_text(x, y, text=icon, fill=self.purple, font='Verdana 18 bold italic')
        self.used[3*row + column] = icon
        self.checkWin(3*row + column)

      self.canvas.update_idletasks()
      print 'Used:', self.used

      self.lastTimestamp = float(timestamp)
      print 'time: %s' %self.lastTimestamp

      if self.icon == icon:
        print 'was my move...now waiting'
        self.recvMove()
    else:
      print 'not updating'
      self.lastTimestamp = float(timestamp)
      print 'time: %s' %self.lastTimestamp
      if self.icon != icon:
        self.recvMove()

  #Checks if the last move resulted in a win
  def checkWin(self, cell):
    win = False
    winCells = list()
    #Top row
    if cell <= 2:
      if self.used[0] == self.used[1] and self.used[0] == self.used[2]:
        print 'top row win'
        for i in range(3):
          winCells.append(i)
        win = True
    #Middle row
    if cell >= 3 and cell <=5:
      if self.used[3] == self.used[4] and self.used[3] == self.used[5]:
        print 'middle row win'
        for i in range(3, 6):
          winCells.append(i)
        win = True
    #Bottom row
    if cell >= 6:
      if self.used[6] == self.used[7] and self.used[6] == self.used[8]:
        print 'bottom row win'
        for i in range(6, 9):
          winCells.append(i)
        win = True
    #Left column
    if cell%3 == 0:
      if self.used[0] == self.used[3] and self.used[0] == self.used[6]:
        print 'left column win'
        for i in range(0, 7, 3):
          winCells.append(i)
        win = True
    #Middle column
    if cell%3 == 1:
      if self.used[1] == self.used[4] and self.used[1] == self.used[7]:
        print 'middle column win'
        for i in range(1, 8, 3):
          winCells.append(i)
        win = True
    #Right column
    if cell%3 == 2:
      if self.used[2] == self.used[5] and self.used[2] == self.used[8]:
        print 'right column win'
        for i in range(2, 9, 3):
          winCells.append(i)
        win = True
    #Top-left diagonal
    if cell%4 == 0:
      if self.used[0] == self.used[4] and self.used[0] == self.used[8]:
        print 'top-left diagonal win'
        for i in range(0, 9, 4):
          winCells.append(i)
        win = True
    #Top-right diagonal
    if cell == 2 or cell == 4 or cell == 6:
      if self.used[2] == self.used[4] and self.used[2] == self.used[6]:
        print 'top-right diagonal win'
        for i in range(2, 7, 2):
          winCells.append(i)
        win = True

    if win:
      self.markWin(winCells)
      self.endGame(self.used[cell])

  #Indicates winning cells in the GUI
  def markWin(self, *winCells):
    cellList = winCells[0]
    print winCells
    print cellList
    for cell in cellList:
      print cell
      self.canvas.itemconfigure(self.cells[cell/3, cell%3], fill=self.green)

  #Creates dialog to declare the winner and closes the connection
  def endGame(self, winningIcon):
    tkMessageBox.showinfo('Game Over!', 'Player %s wins!' %winningIcon)
    self.sock.close()
Пример #9
0
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=0,
                 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:
                    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()