Форум сайта python.su
Доброго времени суток. Есть treeview и есть поиск, который выделяет найденную информацию. Как сделать чтобы treeview прокрутился к искомому элементу, который выделился? Спасибо
import tkinter as tk from tkinter import ttk tree_info = [('bc2e13898123', '127.0.0.1', 'asdasdakkkk', 'True', '21:25 06-10-2020'), ('bc2e13898128', 'None', 'asdasda', 'False', 'None'), ('bc2e13898125', 'None', 'asdasda', 'False', 'None',), ('bc2e13898124', '127.0.0.1', '456', 'True', '10:22 06-10-2020'), ('bc2e13898126', '127.0.0.1', 'Не_установлено', 'True', '18:54 07-10-2020'), ('bc2e13898121', 'None', 'Не_установлено', 'False', 'None'), ('bc2e13898122', 'None', 'Не_установлено', 'False', 'None'), ('bc2e13898127', 'None', 'Не_установлено', 'False', 'None'), ('bc2e13898128', 'None', 'Не_установлено', 'False', 'None'), ('bc2e13898129', 'None', 'Не_установлено', 'False', 'None'), ('bc2e13898110', 'None', 'Не_установлено', 'False', 'None'), ('bc2e13898111', 'None', 'Не_установлено', 'False', 'None'), ('bc2e13898112', 'None', 'Не_установлено', 'False', 'None'), ('bc2e13898113', 'None', 'Не_установлено', 'False', 'None'), ('bc2e13898114', 'None', 'Не_установлено', 'False', 'None'), ('bc2e13898115', 'None', 'Не_установлено', 'False', 'None'), ('bc2e13898116', 'None', 'Не_установлено', 'False', 'None'), ('bc2e13898117', 'None', 'Не_установлено', 'False', 'None'), ('bc2e13898118', 'None', 'Не_установлено', 'False', 'None'), ('bc2e13898119', 'None', 'Не_установлено', 'False', 'None'), ('bc2e13898120', 'None', 'Не_установлено', 'False', 'None'), ('bc2e13898131', 'None', 'Не_установлено', 'False', 'None'), ('bc2e13898132', 'None', 'Не_установлено', 'False', 'None'), ('bc2e13898133', 'None', 'Не_установлено', 'False', 'None'), ('bc2e13898134', 'None', 'Не_установлено', 'False', 'None'), ('bc2e13898135', 'None', 'Не_установлено', 'False', 'None'), ('bc2e13898136', 'None', 'Не_установлено', 'False', 'None'), ('bc2e13898137', 'None', 'Не_установлено', 'False', 'None'), ('bc2e13898138', 'None', 'Не_установлено', 'False', 'None'), ('bc2e13898139', 'None', 'Не_установлено', 'False', 'None'), ('bc2e13898140', 'None', 'Не_установлено', 'False', 'None')] def tree_insert(): count = 1 for i in tree_info: tree.insert('', tk.END, 'item{}'.format(count), value=(i), tag=(i)) count += 1 #Поиск def search(): search_entry_get = search_entry.get() id_to_select = () if search_entry_get != '': all_tags = root.call(str(tree), "tag", "names") tags_to_select = tuple(filter(lambda tag: search_entry_get.lower() in tag.lower(), all_tags)) for sorted_tag in tags_to_select: id_to_select += tree.tag_has(sorted_tag) tree.selection_set(id_to_select) root = tk.Tk() root.minsize(width=650, height=450) root.maxsize(width=650, height=450) # Определение таблицы tree = ttk.Treeview(root, column=('ID', 'IP', 'Name', 'Confirm', 'Time')) scrollbar = ttk.Scrollbar(root, orient="vertical", command=tree.yview) tree.configure(yscrollcommand=scrollbar.set) tree.column('#0', width=40, anchor='center') tree.column('ID', width=125, anchor='center') tree.column('IP', width=125, anchor='center') tree.column('Name', width=145, anchor='center') tree.column('Confirm', width=115, anchor='center') tree.column('Time', width=125, anchor='center') tree.heading('#0', text='Статус') tree.heading('ID', text='ID') tree.heading('IP', text='IP-адрес') tree.heading('Name', text='Имя') tree.heading('Confirm', text='Подтверждение') tree.heading('Time', text='Время получения') # Кнопки в окне и их местоположение search_entry = tk.Entry(root, width=90, border=2) search_button_form = tk.Button(root, text='Поиск', command=search) tree.place(x=0, y=60, relwidth=1, height=-25, relheight=0.9) search_entry.place(x=-320, y=17, relx=0.5) search_button_form.place(x=252, y=16, relx=0.5) scrollbar.place(x=-18, relx=1, y=79, height=-45, relheight=0.9) tree_insert() root.mainloop()
Отредактировано regnor (Окт. 8, 2020 20:41:42)
Офлайн
нашел вариант, может не совсем правильно но работает
#Поиск def search(): search_entry_get = search_entry.get() id_to_select = () if search_entry_get != '': all_tags = root.call(str(tree), "tag", "names") tags_to_select = tuple(filter(lambda tag: search_entry_get.lower() in tag.lower(), all_tags)) for sorted_tag in tags_to_select: id_to_select += tree.tag_has(sorted_tag) tree.selection_set(id_to_select) if len(id_to_select) == 1: item_count = len(tree.get_children()) tree.yview_moveto((int(id_to_select[0][4:]) - 1) / item_count)
Офлайн