Python:在不涉及鼠标的任何对象上使用.bind()时遇到问题
我可以制作一个基本的python应用程序,如下所示: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,
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()