我正在创建一个冒险游戏,我想将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()
这是完整的代码。
答案 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::string
和Entry
以外的大多数小部件都不会获得焦点,除非您明确将焦点设置为它们。
注意:一次只有一个小部件可以拥有键盘焦点。
您还可以设置对根窗口的绑定,无论哪个窗口小部件都有焦点,都会触发它。
有关如何处理键绑定的更全面说明,请参阅以下答案:https://stackoverflow.com/a/11542200/7432
为什么这个(简单的)代码不起作用?
它不能按预期的方式工作,因为绑定位于Frame小部件上,但该小部件没有键盘焦点。你可以把它集中在这样的事情上:
Text
或者,您只能在单击框架后通过在鼠标单击上创建绑定来对其进行聚焦:
areal.focus_set()
注意:您绑定到大写字母“A”,因此请确保在测试时按 control-alt-a