2015-04-02 60 views
2

我可以做一个基本的Python应用程序,像这样:的Python:使用.bind()对任何遇到问题不涉及鼠标

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

,它会表现就像你所期望的。它会在“画布”上创建一个正方形,并在您每次单击“画布”时将该正方形移动50个像素。

然而,当我更换

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

,例如,

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

方不动,不管多少次,我按Enter键。任何类型的键盘输入(例如<space>等)都会出现此问题,但涉及鼠标的任何输入都可以。

任何输入都值得赞赏。谢谢!

回答

0

不完全确定是什么原因,但它似乎工作,如果您使用bind_all而不是bind

field.bind_all('<Return>',moveUp) 

我的猜测是,使用键盘,画布没有焦点,所以没有注册事件。使用bind_all,当应用程序的任何窗口小部件有焦点时,该事件被注册。

有关levels of binding的信息,请参阅此处。

+0

完美的作品。谢谢! – Blueper 2015-04-02 22:16:21

1

field没有焦点,因此不捕获按键。一种选择就是让更多的结合一般:

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

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

另一种选择是将焦点设置到field

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