Python Tkinter TreeView搜索绑定KeyRelease报错,点击按钮正常
问题:Tkinter绑定KeyRelease事件触发Search函数时报错
我用Python的TreeView实现搜索功能,点击搜索按钮时功能正常,但将Search函数绑定到输入框的<KeyRelease>事件后,输入内容时触发以下报错:
Exception in Tkinter callback Traceback (most recent call last): File "/Library/Frameworks/Python.framework/Versions/3.11/lib/python3.11/tkinter/__init__.py", line 1948, in __call__ return self.func(*args) ^^^^^^^^^^^^^^^^ TypeError: Main_menu.Search() takes 1 positional argument but 2 were given
相关代码片段:
# 绑定事件 self.search_firstname.bind("<KeyRelease>",self.Search) self.search_Surname.bind("<KeyRelease>",self.Search) # Search函数定义 def Search(self): sFirst_Name = self.search_firstname.get() sSurname = self.search_Surname.get() # ... 其余搜索逻辑代码
解决方案
Tkinter的事件绑定会自动传递一个事件对象作为参数给回调函数,而你的Search函数仅定义了self一个参数,因此触发参数不匹配的错误。有两种修复方式:
方式1:修改Search函数,兼容事件参数
给Search函数添加一个带默认值的event参数,这样不管是按钮点击(无需传参)还是事件绑定(自动传事件对象)都能正常调用:
def Search(self, event=None): sFirst_Name = self.search_firstname.get() sSurname = self.search_Surname.get() search_rec = (sFirst_Name,sSurname) search_rec_new = tuple(item for item in search_rec if item !="") # 注意:这里修正了原代码的字段错误,第二个字段应为guestSurname search_fields = ["guestFirstname","guestSurname"] search_SQL = "SELECT * FROM tb1Guest1 WHERE guestID LIKE '%'" for i in range(len(search_rec)): if search_rec[i] != "": search_SQL += " AND " + search_fields[i] + " LIKE '%' || ? || '%'" connection = sqlite3.connect("Guestrecord.db") cursor = connection.cursor() # 清空之前的搜索结果 for rec in self.search_table.get_children(): self.search_table.delete(rec) # 显示新的搜索结果 for GuestRec in cursor.execute(search_SQL,search_rec_new): self.search_table.insert("",END,values=GuestRec) connection.commit() connection.close()
方式2:用Lambda包装函数,忽略事件参数
如果不想修改Search函数的定义,可以在绑定时用Lambda接收事件参数并不传递给Search:
self.search_firstname.bind("<KeyRelease>", lambda e: self.Search()) self.search_Surname.bind("<KeyRelease>", lambda e: self.Search())
额外提示
原代码中search_fields列表的两个元素均为"guestFirstname",这会导致搜索姓氏时实际查询的仍是名字字段,记得修正为["guestFirstname","guestSurname"]。
内容的提问来源于stack exchange,提问作者Pearce Maguire
相关产品推荐
相关产品推荐

