Alex Rivera | Logout

Python Tkinter Canvas fail to bind keyboard

Asked 2013-03-07T11:13:55.523
12

I've been running a small script like this

from Tkinter import *
root = Tk()
def callback(event):
    print "callback"
w = Canvas(root, width=300, height=300)
w.bind("<Key>", callback)
w.pack()
root.mainloop()

However, the keyboard event is not handled in my situation (I use python 2.7 on window 7)

If I use

w.bind("<Button-1>", callback)

Things work fine.

So, this really puzzles me. Please anyone tell me why this's happening, thanks in advance.

Edit
Report

1 Answer

19

Key bindings only fire when the widget with the keyboard focus gets a key event. The canvas by default does not get keyboard focus. You can give it focus with the focus_set method. Typically you would do this in a binding on the mouse button.

Add the following binding to your code, then click in the canvas and your key bindings will start to work:

w.bind("<1>", lambda event: w.focus_set())
answered 2013-03-07T12:15:39.690

Your Answer