简单的绑定功能在python中不起作用

时间:2016-04-15 16:32:13

标签: python python-3.x tkinter bind

我正在创建一个冒险游戏,我想将alt + a绑定到我的回调。它没有做我想要的,所以我有两个问题:

  • 是否可以将函数绑定到Label?
  • 为什么这个(简单的)代码不起作用?

以下是代码:

import tkinter as tk

dw = tk.Tk()
dw.title('Hearts')

def play(event):
    print('This is the test.')

areal = tk.Frame(master=dw, width=1200, height=600, bg='blue')
areal.pack_propagate(0)
areal.pack(fill=tk.BOTH, expand=bool(dw))
areal.bind("<Alt-A>", play)

dw.mainloop()

它没有给我一个错误,但是当我点击框架然后按下alt + a时它没有做任何事情。这有什么不对?

修改

import tkinter as tk

def go_fwd(event):
    areal.focus_set()
    print(event.x, event.y)

dw = tk.Tk()
dw.title('Adventure')


areal = tk.Frame(master=dw, width=20000, height=600, bg='blue')
areal.pack_propagate(0)
areal.pack(fill=tk.BOTH, expand=bool(dw)-100)
areal.focus_set()
dw.bind("<Alt-A>", go_fwd)

enter = tk.Frame(master=dw, width=20000, height=100, bg='cyan')
enter.pack(fill=tk.X)

enterentry = tk.Text(master=enter, width=100, height=4, bg='white')
enterentry.pack()
enterbutton = tk.Button(master=enter, text='Senden', bg='red')
enterbutton.pack()

dw.mainloop()

这是完整的代码。

2 个答案:

答案 0 :(得分:1)

您需要绑定到dw而不是框架。

所以,你可以做dw.bind("<Alt-A>", play)

小调,Alt-A将按预期绑定到大写 A,因此您必须点击键盘上的Alt+Shift+A。在键盘上执行Alt+A将无效,您必须绑定到Alt-a才能使其正常工作。

主窗口具有键盘焦点。或者,您可以将绑定留在框架上,然后只需areal.focus_set()将焦点设置为框架。

答案 1 :(得分:1)

  

是否可以将函数绑定到Label?

您可以绑定到您想要的任何小部件。但是,如果绑定键事件,则绑定仅在窗口小部件具有焦点时才起作用。默认情况下,std::stringEntry以外的大多数小部件都不会获得焦点,除非您明确将焦点设置为它们。

注意:一次只有一个小部件可以拥有键盘焦点。

您还可以设置对根窗口的绑定,无论哪个窗口小部件都有焦点,都会触发它。

有关如何处理键绑定的更全面说明,请参阅以下答案:https://stackoverflow.com/a/11542200/7432

  

为什么这个(简单的)代码不起作用?

它不能按预期的方式工作,因为绑定位于Frame小部件上,但该小部件没有键盘焦点。你可以把它集中在这样的事情上:

Text

或者,您只能在单击框架后通过在鼠标单击上创建绑定来对其进行聚焦:

areal.focus_set()

注意:您绑定到大写字母“A”,因此请确保在测试时按 control-alt-a