【问题标题】:Tkinter/Python: Struggling to pass a argument through Entry.bind() methodTkinter/Python:努力通过 Entry.bind() 方法传递参数
【发布时间】:2021-02-03 13:54:34
【问题描述】:

我正在运行一段简单的代码,它创建了一个小 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'

【问题讨论】:

  • 为什么要在 ClientNumberRequest 中添加 SearchForClient 函数。这是导致问题的原因
  • 嗨 @JussPatelnoob - 查看您的评论并将 SearchForClient 功能移到外面,仍然出现相同的错误:TypeError: &lt;lambda&gt;() missing 1 required positional argument: 'client_num'
  • form_entry.bind("&lt;Return&gt;", lambda event, client_num: ...) 更改为form_entry.bind("&lt;Return&gt;", lambda event: ...)

标签: python tkinter callback arguments tkinter-entry


【解决方案1】:

通过事件调用的函数必须接受一个位置参数,该参数将被传递一个事件对象。如果你想让它接受其他参数,它们必须是关键字参数。

你需要重新定义你的 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)

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2023-04-03
    • 2015-01-15
    • 2017-11-20
    • 2015-09-29
    • 1970-01-01
    • 2016-02-24
    • 2016-04-26
    相关资源
    最近更新 更多