【问题标题】:binding two buttons to the same widget tkinter [duplicate]将两个按钮绑定到同一个小部件 tkinter [重复]
【发布时间】:2020-07-13 16:08:47
【问题描述】:

是否可以将两个差异键绑定到同一个小部件并调用不同的函数。我收到dbase() missing positional argument event 的错误,即使我已将事件作为参数传入

更新:所以实际的错误是当我将“返回”绑定到一个条目小部件然后我尝试单击按钮时,我得到了错误:

Exception in Tkinter callback
Traceback (most recent call last):
  File "C:\Users\nihaa\AppData\Local\Programs\Python\Python37-32\lib\tkinter\__init__.py", line 1705, in __call__
    return self.func(*args)
TypeError: dbase() missing 1 required positional argument: 'event'

代码:

def search():
    log = Toplevel(root)
    log.title('Search Book')
    def dbase(event):
        .....
    def clicker(event):
        ....
    def key_pressed(event):
        ....

    entry1.bind_all('<Key>',key_pressed)    
    button1.bind('<Button-1>',clicker)
    entry1.bind('<Return>',dbase)

【问题讨论】:

  • 它在我的电脑上运行良好。
  • @jizhihaoSAMA 更新了Q
  • 请提供minimal reproducible example 我们可以用来重现问题。
  • @BryanOakley 再次更新
  • 我看不出它怎么可能给出这个错误:dbase 清楚地接受event 作为参数,并且所有绑定函数都使用该参数调用。我认为你忽略了一些事情。您是否尝试将按钮配置为具有command=dbase?这会导致错误,但您没有在示例中显示。

标签: python tkinter key-bindings


【解决方案1】:

当你按下按钮时,它会调用函数dbase。 但是你的函数dbase需要传递一个参数event,但是此时它不会传递任何参数。这就是为什么它会引发异常(如果你通过.bind调用dbase,它会传递参数)。要解决此问题,您需要为 event 绑定默认参数:

import tkinter

def dbase(event=None):
    print("you are passing")

r = tkinter.Tk()
b = tkinter.Button(r,command=dbase)
r.bind_all("<Return>", dbase)
b.pack()

r.mainloop()

或者如果您不需要参数,请在bind 中使用lambda

import tkinter

def dbase():
    print("you are passing")

r = tkinter.Tk()
b = tkinter.Button(r,command=dbase)
r.bind_all("<Return>", lambda e: dbase())
b.pack()

r.mainloop()

直接按按钮或按&lt;Enter&gt;即可。

【讨论】:

  • 好的,所以我们不能在按钮中绑定?仅在r 中?
  • @CoolCloud:您可以为按钮添加绑定。不过,通常你不应该这样做,因为按钮支持 command 选项。
  • @CoolCloud 我认为您需要绑定到按钮的唯一情况是您必须将其绑定到绑定,例如&lt;Key&gt;&lt;Double-Button&gt;
  • 我知道它已经过去了一个多月,但我有个疑问,如果我想使用一些与事件相关的属性,当我点击按钮时,会在函数内部触发
  • @CoolCloud 按下按钮不会传递event 参数。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2014-05-13
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多