Tkinter Treeview Search не максимизируется при поиске детей - PullRequest
0 голосов
/ 15 июня 2019

# При поиске трехсимвольного ключевого слова в Tkinter Treeview выполняется поиск потомков детей #children, но уровень потомков не максимизируется, однако, когда вручную #maximized дети выделяются нормально. Кроме того, искомое ключевое слово не # прокручивает окно. Есть ли способ сделать это? Пожалуйста, помогите.

Search when scrolled manually and maximized the level


def search(self, item=''):
    search_pattern = str(self.searchText.get())
    if len(search_pattern) < 3:
        return

    children = self.tree.get_children(item)
    for child in children:
        value_list = self.tree.item(child)["values"]
        #print(value_list)
        for i in range(len(value_list)):
            if type(value_list[0]) != int:
                if value_list[0].isprintable():
                    #print(value_list[i],'printable')
                    #if value_list[0].lower().startswith(search_pattern.lower()):
                    if value_list[0].lower().find(search_pattern.lower()) != -1:
                        self.tree.selection_set(child)
                    else:
                        res = search(self,item=child)                
        search(self,item=child)


def search_box(root):

    root.searchText = StringVar()                                       
    root.search_input = ttk.Entry(root, textvariable = root.searchText, justify = LEFT)
    root.search_input.grid(column = 0, row = 0, padx=60, pady=5, sticky='NW', rowspan=2)
    print(root.search_input)
    print(root.searchText)

    root.searchText.trace_variable("w",lambda x,y,z: search(root))      # 
    Callback if stringvar is updated

    root.bind("<Return>", lambda x: hideEntry(root,x))
    root.bind("<Escape>", lambda x: hideEntry(root,x))

1 Ответ

0 голосов
/ 15 июня 2019

Чтобы расширить филиал, вы можете позвонить tree.item(iid, open=True).

Чтобы прокрутить до места, где поиск завершен, вы можете использовать tree.see(iid).

Объединение обоих в вашем search методе:

def search(self, item=''):
    search_pattern = str(self.searchText.get())
    if len(search_pattern) < 3:
        return

    children = self.tree.get_children(item)
    for child in children:
        value_list = self.tree.item(child)["values"]
        for i in range(len(value_list)):
            if type(value_list[0]) != int:
                if value_list[0].isprintable():
                    if value_list[0].lower().find(search_pattern.lower()) != -1:
                        self.tree.item(item,open=True)
                        self.tree.selection_set(child)
                        self.tree.see(child)
                    else:
                        res = search(self,item=child)                
        search(self,item=child)

Вы можете прочитать документацию по дереву здесь .

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...