Python中的简单绑定函数不起作用

2024-06-16 15:07:35 发布

您现在位置: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时它什么也不会做。这里有什么问题?在

编辑:

^{pr2}$

这是完整的代码。在


Tags: 函数代码importplaytitletkinteras标签
2条回答

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

你可以绑定到任何你想要的小部件。但是,如果绑定键事件,则只有当小部件具有焦点时,绑定才会起作用。默认情况下,除了EntryText之外的大多数小部件都不会获得焦点,除非您显式地将焦点设置为它们。在

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

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

有关如何处理键绑定的更彻底的解释,请参阅以下答案:https://stackoverflow.com/a/11542200/7432

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

它的工作方式不像你期望的那样,因为绑定在一个框架小部件上,但是这个小部件没有键盘焦点。你可以用这样的方法来集中注意力:

areal.focus_set()

或者,只有在单击帧后,通过在鼠标单击上创建绑定,才能使其成为焦点:

^{pr2}$

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

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

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

一个小提示,Alt-A将按预期绑定到大写A,因此您必须单击键盘上的Alt+Shift+A。在键盘上执行Alt+A操作将不起作用,您必须绑定到Alt-a才能使其工作。在

主窗口有键盘焦点。或者,也可以将绑定保留在帧上,只需执行areal.focus_set()将焦点设置到帧上。在

相关问题 更多 >