Use mouse to draw a shape on canvas : Canvas « GUI Tk « Python






Use mouse to draw a shape on canvas

Use mouse to draw a shape on canvas

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) 
        canvas.bind('<B1-Motion>',     self.onGrow)  
        canvas.bind('<Double-1>',      self.onClear) 
        canvas.bind('<ButtonPress-3>', self.onMove)  
        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] 
        self.start = event
        self.drawn = None
    def onGrow(self, event):                         
        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')                   
    def onMove(self, event):
        if self.drawn:                               
            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()

           
       








Related examples in the same category

1.Canvas: Simple plotCanvas: Simple plot
2.Bound Scale action with a canvasBound Scale action with a canvas
3.Canvas inside a frameCanvas inside a frame
4.Use canvas to draw line, oval, rectangle, bitmap and arc
5.Bind mouse click action to the object on a canvasBind mouse click action to the object on a canvas
6.Bind action to canvasBind action to canvas
7.Image canvasImage canvas