单击按钮并按enter键时调用相同的功能



我有一个GUI,它有Entry小部件和提交Button

我基本上是在尝试使用get()并打印Entry小部件中的值。我想通过单击提交Button或按键盘上的回车返回来完成此操作。

我试图用按下提交按钮时调用的相同函数绑定"<Return>"事件:

self.bind("<Return>", self.enterSubmit)

但我有一个错误:

需要2个参数

self.enterSubmit函数只接受一个,因为Buttoncommand选项只需要一个。

为了解决这个问题,我尝试创建两个功能相同的函数,它们只是有不同数量的参数。

有没有更有效的方法来解决这个问题?

您可以创建一个接受任意数量参数的函数,如下所示:

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()

相关内容

  • 没有找到相关文章

最新更新