Esempio n. 1
0
class updating_box():
    def __init__(self, root, widget, li, gridx, gridy):

        self.li = li
        self.widget = widget
        gridx = gridx
        gridy = gridy

        self.basic_frame = ttk.Frame(root)
        self.basic_frame.grid(row=gridx, column=gridy)

        self.input_entry = ttk.Entry(self.basic_frame,
                                     textvariable=self.widget)
        self.input_entry.grid(row=0, column=1)

        self.lb = Listbox(self.basic_frame, width=20, height=4)
        self.lb.insert(0, *self.li)

        self.input_entry.bind('<KeyRelease>', lambda e: self.update_list())
        self.lb.bind('<Return>', lambda e: self.selected_item())
        self.lb.bind('<Double-Button-1>', lambda e: self.selected_item())
        self.input_entry.bind('<Button-1>', lambda e: self.show_me())
        self.input_entry.bind('<Return>', lambda e: self.hide_me())

    def hide_me(self):
        self.lb.grid_forget()

    def show_me(self):
        self.lb.grid(row=1, column=1)

    def update_list(self):
        temp = list(
            filter(
                lambda x: x
                if self.widget.get().lower() in x.lower() else '', self.li))
        self.lb.delete(0, END)
        self.lb.insert(0, *temp)

    def selected_item(self):
        for i in self.lb.curselection():
            self.widget.set(self.lb.get(i))
        self.lb.tk_focusNext().focus()
        self.lb.grid_forget()