我可以像这样制作一个基本的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()
它的行为就像你期望的那样。它在Canvas上创建一个正方形,并在每次单击Canvas时将该正方形移动50个像素。
然而,当我更换
field.bind('<Button-1>',moveUp)
,例如,
field.bind('<Return>',moveUp)
无论我按下回车键多少次,广场都不会移动。对于任何类型的键盘输入(例如<space>
等),此问题仍然存在,但任何涉及鼠标的输入都可以。
任何输入都表示赞赏。谢谢!
答案 0 :(得分:1)
field
没有焦点,因此无法捕获按键。一种选择只是使绑定更通用:
field.bind('<Return>',moveUp)
到
root.bind('<Return>',moveUp)
另一种选择是将焦点设置为field
:
field.bind('<Return>',moveUp)
field.focus_set()
答案 1 :(得分:0)
不完全确定原因是什么,但如果您使用bind_all
代替bind
,它似乎有效。
field.bind_all('<Return>',moveUp)
我的猜测是使用键盘,画布没有焦点,所以没有注册事件。使用bind_all
,当应用程序的任何窗口小部件具有焦点时,将注册该事件。
有关levels of binding的一些信息,请参阅此处。