[英]Tkinter/Python: Struggling to pass a argument through Entry.bind() method
我正在运行一段简单的代码,它创建了一个小 tk 表单/窗口,要求用户输入客户的联系电话,我计划稍后使用它在数据库上搜索客户的详细信息(除此之外)
我已经使用 .bind() 方法来跟踪用户何时按 Enter 接受数字输入,但为了我的爱,我似乎无法将参数传递给回调函数。
我的代码如下:谁能告诉我可能做错了什么(如果我尝试了各种修复尝试后的许多最新版本,则此当前代码)
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))
我得到的错误只有在我运行程序时按回车键后才出现
Exception in Tkinter callback
Traceback (most recent call last):
File "C:\Users\27826\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'
通过事件调用的 function 必须接受单个位置参数,该参数将传递给事件 object。 如果您希望它接受其他 arguments,它们必须是关键字 arguments。
你需要重新定义你的 lambda 看起来像这样:
form_entry.bind("<Return>", lambda event, client_num=client_num:
SearchForClient(event, client_num))
但是,如果您只使用该参数来获取值,则不需要它,因为事件 object 具有对小部件的引用并且小部件具有get
方法:
def SearchForClient(event):
search_numb = event.widget.get()
form_entry.bind("<Return>", SearchForClient)
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.