File: class/Extras/Code/Gui/Code/canvasDraw.py

File: class/Extras/Code/Gui/Code/canvasDraw.py

#################################################################
# draw elastic shapes on a canvas on drag, move on right click;
# see canvasDraw_tags*.py for extensions with tags and animation
#################################################################
from Tkinter import *
trace = 0 
class CanvasEventsDemo: 
 def __init__(self, parent=None):
 canvas = Canvas(width=300, height=300, bg='beige') 
 canvas.pack()
 canvas.bind('<ButtonPress-1>', self.onStart) # click
 canvas.bind('<B1-Motion>', self.onGrow) # and drag
 canvas.bind('<Double-1>', self.onClear) # delete all
 canvas.bind('<ButtonPress-3>', self.onMove) # move latest
 self.canvas = canvas
 self.drawn = None
 self.kinds = [canvas.create_oval, canvas.create_rectangle]
 def onStart(self, event):
 self.shape = self.kinds[0]
 self.kinds = self.kinds[1:] + self.kinds[:1] # start dragout
 self.start = event
 self.drawn = None
 def onGrow(self, event): # delete and redraw
 canvas = event.widget
 if self.drawn: canvas.delete(self.drawn)
 objectId = self.shape(self.start.x, self.start.y, event.x, event.y)
 if trace: print objectId
 self.drawn = objectId
 def onClear(self, event):
 event.widget.delete('all') # use tag all
 def onMove(self, event):
 if self.drawn: # move to click spot
 if trace: print self.drawn
 canvas = event.widget
 diffX, diffY = (event.x - self.start.x), (event.y - self.start.y)
 canvas.move(self.drawn, diffX, diffY)
 self.start = event
if __name__ == '__main__':
 CanvasEventsDemo()
 mainloop()



AltStyle によって変換されたページ (->オリジナル) /