首页 > 解决方案 > 当条目小部件没有聚焦时,我将如何隐藏列表框小部件?

问题描述

我正在开发一个 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")

我试图创建一个切换功能,当条目不再具有焦点时仅打印“单击”但它永远不会运行该功能

标签: pythontkinter

解决方案


您可以使用该place_forget方法删除放置的小部件。如果你想让它显示,你将不得不place再次调用。继承人的一些信息placeplace_forget方法: https ://effbot.org/tkinterbook/place.htm

IE:

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__


推荐阅读