我正在开发一个tkinter应用程序,并试图仅在条目小部件(当然还有列表框本身)没有获得焦点时显示一个列表框。换句话说,它仅在您处于条目小部件/键入中时显示搜索建议。
self.from_query.bind("<FocusIn>", self.updateList)
self.from_query.bind("<FocusOut>", self.toggle)
# Dynamically updates the query frames listboxes
def updateList(self, *args):
search_term = self.users_search.get()
self.from_listbox = Listbox(root)
self.from_listbox.place(x=100, y=652)
self.from_listbox.pi = self.from_listbox.place_info()
self.from_listbox.config(highlightbackground="red")
test_lbox = ['Adam', 'Lucy', 'Barry', 'Bob', 'James', 'Frank', 'Susan', 'Amanda', 'Christie']
self.from_listbox.delete(0, END)
for item in test_lbox:
if search_term.lower() in item.lower():
self.from_listbox.insert(END, item)
def toggle(self):
print("clicked")
我试图创建一个切换功能,当条目不再具有焦点但永远无法运行该功能时,它仅显示“已单击”
答案 0 :(得分:0)
您可以使用place_forget
方法删除放置的小部件。如果要显示它,则必须再次调用place
。
以下是有关place
和place_forget
方法的一些信息:
https://effbot.org/tkinterbook/place.htm
即:
def toggle(self):
if self.listbox_is_showing:
self.listbox.place_forget()
self.listbox_is_showing = False
else:
self.listbox.place(x=100, y=652)
self.listbox_is_showing = True
您将必须在listbox_is_showing
中设置__init__
答案 1 :(得分:0)
使用bind
并触发事件时,该函数将始终返回描述该事件的对象。您的toggle
方法不带参数,因此会引发TypeError
。
要使您的方法有效,只需将event=None
添加到您的toggle
函数中即可:
def toggle(self,event=None):
print("clicked")