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())