Tkinter/Python:努力通过 Entry.bind() 方法传递参数
Tkinter/Python: Struggling to pass a argument through Entry.bind() method
我是 运行 一段简单的代码,它创建了一个小的 tk inter form/window 要求用户输入客户的联系电话,我计划稍后使用它来搜索客户数据库的详细信息(除此之外)
我已经使用 .bind() 方法来跟踪用户何时按回车键接受数字输入,但是为了我的爱,我似乎无法将参数传递给回调函数。
我的代码如下:任何人都可以告诉我我可能做错了什么(这个当前代码如果在我尝试各种修复尝试后是最新版本)
import tkinter as tk
def ClientNumberRequest():
def SearchForClient(event, fun_client_num):
search_numb = fun_client_num.get()
# Do some stuff with the search number
client_num_window = tk.Tk()
form_label = tk.Label(client_num_window, text="Please enter the client's
contact number")
form_label.grid(row=0, column=0)
client_num = tk.StringVar()
form_entry = tk.Entry(client_num_window, textvariable=client_num)
form_entry.grid(row=1, column=0)
form_entry.focus_set()
form_entry.bind("<Return>", lambda event, client_num:
SearchForClient(event, client_num))
我得到的错误只有在我点击 enter/return 之后 运行 程序
Exception in Tkinter callback
Traceback (most recent call last):
File "C:\Users826\AppData\Local\Programs\Python\Python39\lib\tkinter\__init__.py", line 1884, in __call__
return self.func(*args)
TypeError: <lambda>() missing 1 required positional argument: 'client_num'
通过事件调用的函数必须接受一个位置参数,该参数将传递一个事件对象。如果你想让它接受其他参数,它们必须是关键字参数。
您需要将 lambda 重新定义为如下所示:
form_entry.bind("<Return>", lambda event, client_num=client_num:
SearchForClient(event, client_num))
但是,如果您只是为了获取值而使用该参数,则不需要它,因为事件对象具有对小部件的引用并且小部件具有 get
方法:
def SearchForClient(event):
search_numb = event.widget.get()
form_entry.bind("<Return>", SearchForClient)
我是 运行 一段简单的代码,它创建了一个小的 tk inter form/window 要求用户输入客户的联系电话,我计划稍后使用它来搜索客户数据库的详细信息(除此之外)
我已经使用 .bind() 方法来跟踪用户何时按回车键接受数字输入,但是为了我的爱,我似乎无法将参数传递给回调函数。
我的代码如下:任何人都可以告诉我我可能做错了什么(这个当前代码如果在我尝试各种修复尝试后是最新版本)
import tkinter as tk
def ClientNumberRequest():
def SearchForClient(event, fun_client_num):
search_numb = fun_client_num.get()
# Do some stuff with the search number
client_num_window = tk.Tk()
form_label = tk.Label(client_num_window, text="Please enter the client's
contact number")
form_label.grid(row=0, column=0)
client_num = tk.StringVar()
form_entry = tk.Entry(client_num_window, textvariable=client_num)
form_entry.grid(row=1, column=0)
form_entry.focus_set()
form_entry.bind("<Return>", lambda event, client_num:
SearchForClient(event, client_num))
我得到的错误只有在我点击 enter/return 之后 运行 程序
Exception in Tkinter callback
Traceback (most recent call last):
File "C:\Users826\AppData\Local\Programs\Python\Python39\lib\tkinter\__init__.py", line 1884, in __call__
return self.func(*args)
TypeError: <lambda>() missing 1 required positional argument: 'client_num'
通过事件调用的函数必须接受一个位置参数,该参数将传递一个事件对象。如果你想让它接受其他参数,它们必须是关键字参数。
您需要将 lambda 重新定义为如下所示:
form_entry.bind("<Return>", lambda event, client_num=client_num:
SearchForClient(event, client_num))
但是,如果您只是为了获取值而使用该参数,则不需要它,因为事件对象具有对小部件的引用并且小部件具有 get
方法:
def SearchForClient(event):
search_numb = event.widget.get()
form_entry.bind("<Return>", SearchForClient)