# CanvasTest.py """Test the Canvas widget and mouse events""" from Tkinter import * import sys class Application(Frame): def __init__(self, master=None): Frame.__init__(self, master) self.dragging = False self.currentShapeID = None self.grid() self.createWidgets() # end __init__ def createWidgets(self): self.shapeMenubutton = Menubutton(self, text="Shape", relief=RAISED) self.shapeMenubutton.grid(row=0, column=0, sticky=N) self.shapeMenubutton.menu = Menu(self.shapeMenubutton, tearoff=0) self.shapeMenubutton["menu"] = self.shapeMenubutton.menu self.shapeVar = StringVar() self.shapeMenubutton.menu.add_radiobutton( label="oval", command=self.shapeSelection, value = "circle", variable=self.shapeVar) self.shapeMenubutton.menu.add_radiobutton( label="rectangle", command=self.shapeSelection, value = "top_left_corner", variable=self.shapeVar) self.shapeVar.set("circle") self.myCanvas = Canvas(self, cursor=self.shapeVar.get() ,borderwidth=4, height='5i', width='7i') self.myCanvas.grid(row=1, column=0, columnspan=2) self.myCanvas.bind("", self.startShape) self.myCanvas.bind("", self.sizeShape) self.myCanvas.bind("", self.endShape) self.doneButton = Button(self, text='Click when done', command=self.doneSelections) self.doneButton.grid(row=3, column=0, columnspan=2,sticky=W+E) # end createWidgets def shapeSelection(self): print "Shape selected:", self.shapeVar.get() self.myCanvas["cursor"] = self.shapeVar.get() # end shapeSelection def startShape(self, event): print "startShape: shape =", self.shapeVar.get(),"x =", event.x, "y =", event.y self.dragging = True if self.shapeVar.get() == "circle": self.currentShapeID = self.myCanvas.create_oval(event.x, event.y, event.x, event.y) elif self.shapeVar.get() == "top_left_corner": self.currentShapeID = self.myCanvas.create_rectangle(event.x, event.y, event.x, event.y) # end startShape def sizeShape(self, event): if self.dragging: oldCoords = self.myCanvas.coords(self.currentShapeID) self.myCanvas.delete(self.currentShapeID) if self.shapeVar.get() == "circle": self.currentShapeID = self.myCanvas.create_oval(oldCoords[0], oldCoords[1], event.x, event.y) elif self.shapeVar.get() == "top_left_corner": self.currentShapeID = self.myCanvas.create_rectangle(oldCoords[0], oldCoords[1], event.x, event.y) # end if # end if # end sizeShape def endShape(self, event): self.dragging = False # end endShape def doneSelections(self): print "Done" self.myCanvas.postscript(file="SimpleDrawOut.eps") sys.exit # end doneSelections # end class Application myApp = Application() myApp.mainloop()