单击按钮并按Enter时调用相同的功能
问题内容:
我有一个具有Entry
小部件和Submit的GUI Button
。
我基本上是试图使用get()
和打印Entry
小部件内的值。我想通过单击“ 提交” Button
或按 Enter 或键盘 返回
来完成此操作。
我试图将"<Return>"
事件与按下提交按钮时调用的函数绑定在一起:
self.bind("<Return>", self.enterSubmit)
但是我得到一个错误:
需要两个参数
但是self.enterSubmit
函数只接受一个,因为对于的command
选择Button
只需要一个。
为了解决这个问题,我尝试创建2个具有相同功能的函数,它们只是具有不同数量的参数。
有更有效的解决方法吗?
问题答案:
您可以创建一个函数,该函数接受任意数量的参数,如下所示:
def clickOrEnterSubmit(self, *args):
#code goes here
这称为任意参数列表。调用者可以随意传递任意数量的参数,并且所有参数都将打包到args
元组中。Enter绑定可以传入其1event
对象,而click命令则可以不传入任何参数。
这是一个最小的Tkinter示例:
from tkinter import *
def on_click(*args):
print("frob called with {} arguments".format(len(args)))
root = Tk()
root.bind("<Return>", on_click)
b = Button(root, text="Click Me", command=on_click)
b.pack()
root.mainloop()
结果,在按下Enter
并单击按钮之后:
frob called with 1 arguments
frob called with 0 arguments
如果您不希望更改回调函数的签名,则可以将要绑定的函数包装在lambda
表达式中,并 丢弃 未使用的变量:
from tkinter import *
def on_click():
print("on_click was called!")
root = Tk()
# The callback will pass in the Event variable,
# but we won't send it to `on_click`
root.bind("<Return>", lambda event: on_click())
b = Button(root, text="Click Me", command=frob)
b.pack()
root.mainloop()