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

Simple bind function doesn't work in python

我目前正在制作一款冒险游戏,我想将 alt+a 绑定到我的回调。它不符合我的要求,所以我有两个问题:

代码如下:

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

这是完整的代码。

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

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

小注,Alt-A 将按预期绑定到 大写字母 A,因此您必须单击键盘上的 Alt+Shift+A。在键盘上执行 Alt+A 将不起作用,您必须绑定到 Alt-a 才能起作用。

主要 window 有键盘焦点。或者,您也可以将绑定留在框架上,只需执行 areal.focus_set() 即可将焦点设置到框架上。

Is it possible to bind a function to a Label, too?

您可以绑定到任何您想要的小部件。但是,如果您绑定键事件,则绑定仅在小部件具有焦点时才有效。默认情况下,除 EntryText 之外的大多数小部件都不会获得焦点,除非您明确地将焦点设置给它们。

注意:一次只能有一个小部件获得键盘焦点。

您还可以设置到根的绑定 window,无论哪个小部件获得焦点,它都会触发。

有关如何处理键绑定的更详尽的解释,请参阅此答案:

Why does this (simplyfied) code doesn't work?

它没有按您预期的方式工作,因为绑定是在框架小部件上,但该小部件没有键盘焦点。你可以像这样给它焦点:

areal.focus_set()

或者,您只能在单击框架后通过在鼠标单击时创建绑定来为其提供焦点:

areal.bind("<1>", lambda event: areal.focus_set())

注意: 您绑定的是大写字母 "A",因此请确保在测试时您按下的是 control-alt-a