Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/362.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python 如何使Bind和Command在tkinter中执行相同的操作?_Python_Tkinter_Bind_Tkinter Entry - Fatal编程技术网

Python 如何使Bind和Command在tkinter中执行相同的操作?

Python 如何使Bind和Command在tkinter中执行相同的操作?,python,tkinter,bind,tkinter-entry,Python,Tkinter,Bind,Tkinter Entry,我有一个带有输入字段和验证按钮的tkinter GUI。我希望在按下条目中的键或单击按钮时调用相同的函数 问题是,使用条目上的bind方法时,我需要一个“self”参数才能使函数工作,但不能使用按钮 以下是简化代码: from tkinter import * import tkinter.messagebox import tkinter.filedialog def function(): print("Here are some words.") my_window = Tk

我有一个带有输入字段和验证按钮的tkinter GUI。我希望在按下条目中的键或单击按钮时调用相同的函数

问题是,使用条目上的bind方法时,我需要一个“self”参数才能使函数工作,但不能使用按钮

以下是简化代码:

from tkinter import *
import tkinter.messagebox
import tkinter.filedialog


def function():
    print("Here are some words.")

my_window = Tk()

text = StringVar()
input_widget = Entry(my_window, textvariable = text) #We create an input widget.
input_widget.bind("<Return>", function)

benjamin = Button(my_window, text ='Print', command = function) #We create another widget, a 
# button that sends the same function as pressing <Return> key.

input_widget.grid(row = 0, column = 0) #We use grid to place our widgets.
benjamin.grid(row = 0, column = 1)


my_window.mainloop()
我可以通过调用两个函数使其工作,一个用于按钮,另一个用于带有自参数的条目:

def function2(self):
    print("It works with this function.")

有没有办法使
.bind
command
共享同一个函数?

您可以编写函数,使其包含任意数量的参数:

def function(*args):
    #args is now a tuple containing every argument sent to this function
    print("Here are some words.")
现在,您可以使用0、1或任何其他数量的参数成功调用该函数


或者,您可以保持函数不变,并使用lambda丢弃未使用的
self
值:

input_widget.bind("<Return>", lambda x: function())
input_widget.bind(“,lambda x:function())

将此项添加到您的绑定中:

input_widget.bind("<Return>", lambda event: function())
input\u widget.bind(“,lambda事件:function())

事件绑定都需要自动传递给函数的事件参数。通过将lambda与参数事件一起使用;您可以接受这个“事件”变量,基本上放弃它,然后执行
function()中的任何操作。

问题越长,答案越短。感谢您以如此快速高效的方式回答!对我来说,第一个解决方案是好的,然而,问题是通过的事件,而不是自我;没有使用任何类。self不需要调用函数,它只是接收从绑定传递的“事件”。
input_widget.bind("<Return>", lambda event: function())