将两个按钮绑定到同一个小部件 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>
即可。
是否可以将两个差异键绑定到同一个小部件并调用不同的函数。我收到错误 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>
即可。