繁体   English   中英

Tkinter/Python:努力通过 Entry.bind() 方法传递参数

[英]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.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM