Python:在不涉及鼠标的任何对象上使用.bind()时遇到问题

Python:在不涉及鼠标的任何对象上使用.bind()时遇到问题,python,canvas,bind,Python,Canvas,Bind,我可以制作一个基本的python应用程序,如下所示: from tkinter import * block = None def moveUp(event): field.move(block,0,-50) root = Tk() field = Canvas(root, width = 300, height = 300, bg = 'light blue') field.pack() block = field.create_rectangle(100,100,110,

我可以制作一个基本的python应用程序,如下所示:

from tkinter import *

block = None

def moveUp(event):
    field.move(block,0,-50)

root = Tk()

field = Canvas(root, width = 300, height = 300, bg = 'light blue')
field.pack()


block = field.create_rectangle(100,100,110,110)

field.bind('<Button-1>',moveUp)

mainloop()
从tkinter导入*
块=无
def移动(事件):
字段移动(块,0,-50)
root=Tk()
字段=画布(根,宽度=300,高度=300,背景='浅蓝色')
field.pack()
块=字段。创建矩形(100110110)
字段绑定(“”,上移)
mainloop()
它的行为将与您预期的一样。它在画布上创建一个正方形,并在每次单击画布时将该正方形向上移动50像素

然而,当我替换

field.bind('<Button-1>',moveUp)
field.bind(“”,moveUp)
比如,

field.bind('<Return>',moveUp)
field.bind(“”,moveUp)
无论我按多少次回车键,正方形都不会移动。对于任何类型的键盘输入(例如
等),此问题都会持续存在,但任何涉及鼠标的输入都可以


感谢您的任何意见。谢谢

不完全确定原因是什么,但如果您使用
bind\u all
而不是
bind
,它似乎是有效的

field.bind_all('<Return>',moveUp)
field.bind_all(“”,moveUp)
我的猜测是,使用键盘时,画布没有焦点,因此没有注册事件。使用
bind_all
,当应用程序的任何小部件具有焦点时,将注册事件


有关。

的信息,请参见此处。
字段没有焦点,因此无法捕获按键。一种选择是简单地使绑定更通用:

field.bind('<Return>',moveUp)
root.bind('<Return>',moveUp)
field.bind('<Return>',moveUp)
field.focus_set()