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