Event Handling
Events List
Easy Draw supports all Tkinter events. Here is a detailed list if event formats:
<Button-1>
A mouse button is pressed over the widget. Button 1 is the leftmost button, button 2 is the middle button (where available), and button 3 the rightmost button. When you press down a mouse button over a widget, Tkinter will automatically “grab” the mouse pointer, and subsequent mouse events (e.g. Motion and Release events) will then be sent to the current widget as long as the mouse button is held down, even if the mouse is moved outside the current widget. The current position of the mouse pointer (relative to the widget) is provided in the x and y members of the event object passed to the callback.
You can use ButtonPress instead of Button, or even leave it out completely:
<Button-1>
,<ButtonPress-1>
, and<1>
are all synonyms. For clarity, I prefer the<Button-1>
syntax.
<B1-Motion>
The mouse is moved, with mouse button 1 being held down (use B2 for the middle button, B3 for the right button). The current position of the mouse pointer is provided in the x and y members of the event object passed to the callback.
<ButtonRelease-1>
Button 1 was released. The current position of the mouse pointer is provided in the x and y members of the event object passed to the callback.
<Double-Button-1>
Button 1 was double clicked. You can use Double or Triple as prefixes. Note that if you bind to both a single click (<Button-1>) and a double click, both bindings will be called.
<Enter>
The mouse pointer entered the object (this event doesn’t mean that the user pressed the Enter key!).
<Leave>
The mouse pointer left the object.
<FocusIn>
Keyboard focus was moved to Easy Draw.
<FocusOut>
Keyboard focus was moved from Easy Draw to another Window.
<Return>
The user pressed the Enter key. You can bind to virtually all keys on the keyboard. For an ordinary 102-key PC-style keyboard, the special keys are Cancel (the Break key), BackSpace, Tab, Return(the Enter key), Shift_L (any Shift key), Control_L (any Control key), Alt_L (any Alt key), Pause, Caps_Lock, Escape, Prior (Page Up), Next (Page Down), End, Home, Left, Up, Right, Down, Print, Insert, Delete, F1, F2, F3, F4, F5, F6, F7, F8, F9, F10, F11, F12, Num_Lock, and Scroll_Lock.
<Key>
The user pressed any key. The key is provided in the char member of the event object passed to the callback (this is an empty string for special keys).
a
The user typed an “a”. Most printable characters can be used as is. The exceptions are space (
<space>
) and less than (<less>
). Note that1
is a keyboard binding, while<1>
is a button binding.
<Shift-Up>
The user pressed the Up arrow, while holding the Shift key pressed. You can use prefixes like Alt, Shift, and Control.
Each of these events have useful properties that can be retrieved in the event handler function:
x
,y
The current mouse position, in pixels.
x_root
,y_root
The current mouse position relative to the upper left corner of the screen, in pixels.
char
The character code (keyboard events only), as a string.
keysym
The key symbol (keyboard events only).
keycode
The key code (keyboard events only).
num
The button number (mouse button events only).
type
The event type.
Event Handlers
To create an event handler, you simply just create a function definition and provide it with event
as a parameter. Inside the definition, you provide the statements you wish to be executed when the event is triggered.
Example:
Binding an Event to an Easy Draw Object
object.event_setup(event, handler)
To attach or bind an event and handler to an Easy Draw object you must use the .event_setup()
method and provide the event name and handler function name as parameters.
Example: Bind a <Button-1>
event with handler named click_octagon
to the object stored in octagon
.
Binding an Event to the Canvas
canvas_event_setup(event, handler)
To attach or bind an event and handler to the entire Easy Draw canvas you must use the canvas_event_setup()
function and provide the event name and handler function name as parameters.
It is recommended to bind keyboard events to the entire canvas instead of binding key events to a specific object.
Example: Bind a <Up>
arrow key event with handler named move_up
.
Last updated