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.
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())
To avoid the "clicking on the canvas to activate the key bindings", I found simpler code at the following site:
http://ubuntuforums.org/showthread.php?t=1378609
He is attempting to bind a frame, but I implemented it in my own code and the canvas widget works as well. Your code will look like the following:
w.focus_set()
w.bind(<Key>, callback)
If you love us? You can donate to us via Paypal or buy me a coffee so we can maintain and grow! Thank you!
Donate Us With