簡體   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