【问题标题】:Tkinter Key binding doesn't work in PythonTkinter 键绑定在 Python 中不起作用
【发布时间】:2020-12-24 12:17:51
【问题描述】:

我正在尝试制作一个可以增加金钱或其他东西的按钮,但我只是想在另一个项目中对其进行测试

这是我的按钮代码

global counterCheck
counterCheck = 0



def checkClick():
    global counterCheck
    counterCheck += 1
    textClick.config(text=counterCheck)


bttt = Button(root, width=1720, height=600, text="Click Here", command=checkClick)

bttt.bind("<space>", checkClick())
bttt.pack()

【问题讨论】:

  • 使用bttt.bind("&lt;space&gt;", checkClick()),您将函数调用的结果绑定到事件,而不是函数本身。
  • 然而,这实际上不是唯一的问题。对于bind,该函数还必须接受一个参数,并且通过将事件绑定到按钮,按钮需要具有焦点,在这种情况下,无论如何都会在空间上触发。
  • 我已经添加了一个答案,请将其标记为答案,如果有帮助,请关闭 Q

标签: python tkinter


【解决方案1】:

您的代码实际上存在多个问题。第一个是common problem,但还有更多:

  • 您执行该函数,然后将该函数的结果(None)绑定到事件;相反,您必须绑定函数本身
  • 另外,与Button.command 不同,当通过bind 调用函数时,它会得到一个参数,即触发它的事件
  • 通过将 key 绑定到 Button,它只会在按钮有焦点时注册(例如当按 Tab 直到按钮被“突出显示”时)
  • 并且该按钮已经具有一个绑定,当它获得焦点并按下 Space 时可以“点击”,因此添加另一个绑定会使其反应两次

我实际上并没有设法 unbind 按钮的“按下空格键”操作,因此一种解决方法(除了从不让按钮获得焦点之外)是使用不同的键,例如Return,并将其绑定到 root 或使用 bind_all,以便绑定到所有小部件。

def checkClick(*unused): # allow optional unused parameters
    ...

root.bind("<Return>", checkClick) # function itself, no (), root, and Return

在此之后,触发按钮的方式有以下三种:

  • 点击它,拨打command
  • 通过聚焦并按下空格,模拟点击
  • 通过按下Return键,调用按键事件绑定

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2017-01-03
    • 1970-01-01
    • 1970-01-01
    • 2016-05-24
    • 1970-01-01
    相关资源
    最近更新 更多