我有一个GUI,它有Entry
小部件和提交Button
。
我基本上是在尝试使用get()
并打印Entry
小部件中的值。我想通过单击提交Button
或按键盘上的回车或返回来完成此操作。
我试图用按下提交按钮时调用的相同函数绑定"<Return>"
事件:
self.bind("<Return>", self.enterSubmit)
但我有一个错误:
需要2个参数
但self.enterSubmit
函数只接受一个,因为Button
的command
选项只需要一个。
为了解决这个问题,我尝试创建两个功能相同的函数,它们只是有不同数量的参数。
有没有更有效的方法来解决这个问题?
您可以创建一个接受任意数量参数的函数,如下所示:
def clickOrEnterSubmit(self, *args):
#code goes here
这被称为任意参数列表。调用方可以自由地传入任意数量的参数,并且这些参数都将被打包到args
元组中。Enter绑定可能传入其1 event
对象,而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()
您还可以为参数event
指定一个默认值(例如None
)。例如:
import tkinter as tk
def on_click(event=None):
if event is None:
print("You clicked the button")
else:
print("You pressed enter")
root = tk.Tk()
root.bind("<Return>", on_click)
b = tk.Button(root, text='Click Me!', command=on_click)
b.pack()
root.mainloop()