3 # this is the same as simple-demo-1.py, but uses
5 # note that there is no explicit call to start Tk.
6 # Tkinter is smart enough to start the system if it's not already going.
12 def createWidgets(self
):
13 self
.QUIT
= Button(self
, {'text': 'QUIT',
17 'command': self
.quit
})
18 self
.QUIT
.pack({'side': 'bottom', 'fill': 'both'})
20 self
.canvasObject
= Canvas(self
, {"width" : "5i", "height" : "5i"})
21 self
.canvasObject
.pack({'side': 'left'})
23 def mouseDown(self
, event
):
24 # canvas x and y take the screen coords from the event and translate
25 # them into the coordinate system of the canvas object
26 self
.startx
= self
.canvasObject
.canvasx(event
.x
, self
.griddingSize
)
27 self
.starty
= self
.canvasObject
.canvasy(event
.y
, self
.griddingSize
)
29 def mouseMotion(self
, event
):
30 # canvas x and y take the screen coords from the event and translate
31 # them into the coordinate system of the canvas object
32 x
= self
.canvasObject
.canvasx(event
.x
, self
.griddingsize
)
33 y
= self
.canvasObject
.canvasy(event
.y
, self
.griddingsize
)
35 if (self
.startx
!= event
.x
) and (self
.starty
!= event
.y
) :
36 self
.canvasObject
.delete(self
.rubberbandBox
)
37 self
.rubberbandBox
= self
.canvasObject
.create_rectangle(self
.startx
, self
.starty
, x
, y
)
38 # this flushes the output, making sure that
39 # the rectangle makes it to the screen
40 # before the next event is handled
41 self
.update_idletasks()
43 def __init__(self
, master
=None):
44 Frame
.__init
__(self
, master
)
48 # this is a "tagOrId" for the rectangle we draw on the canvas
49 self
.rubberbandBox
= None
51 # this is the size of the gridding squares
52 self
.griddingSize
= 50
54 Widget
.bind(self
.canvasObject
, "<Button-1>", self
.mouseDown
)
55 Widget
.bind(self
.canvasObject
, "<Button1-Motion>", self
.mouseMotion
)