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)
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)
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)
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()
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()
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()
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()
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()
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()