将两个按钮绑定到同一个小部件 tkinter

binding two buttons to the same widget tkinter

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

UPDATE:所以实际错误是当我将 'Return' 绑定到一个条目小部件然后我尝试单击该按钮时,我得到了错误:

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)

当你按下按钮时,它会调用函数dbase。 但是你的函数 dbase 需要传递一个参数 event,但是此时它不会传递任何 arguments.That 为什么它会引发异常(如果你调用 dbase 通过 .bind,它会传递一个参数)。为了解决这个问题,你需要为你的 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()

直接按按钮或按<Enter>即可。