Что такое Python Tkinter Treeview
- Tkinter Treeview относится к иерархическому представлению. Когда у нас есть связь между данными, в этом случае у нас есть Treeview.
- Python Tkinter Treeview обеспечивает улучшенный вид столбцов данных.
- Python Tkinter Treeview является производным от модуля tkinter.ttk .
- При создании Treeview всегда создается один дополнительный столбец. Мы называем этот столбец «столбцом-призраком». Обратите внимание, что это только для нашей справки.
Пример дерева Python Tkinter
Давайте посмотрим на пример дерева tkinter Python .
Код:
from tkinter import * from tkinter import ttk ws = Tk() ws.title('PythonGuides') ws.geometry('400x300') ws['bg']='#fb0' tv = ttk.Treeview(ws) tv['columns']=('Rank', 'Name', 'Badge') tv.column('#0', width=0, stretch=NO) tv.column('Rank', anchor=CENTER, width=80) tv.column('Name', anchor=CENTER, width=80) tv.column('Badge', anchor=CENTER, width=80) tv.heading('#0', text='', anchor=CENTER) tv.heading('Rank', text='Id', anchor=CENTER) tv.heading('Name', text='rank', anchor=CENTER) tv.heading('Badge', text='Badge', anchor=CENTER) tv.insert(parent='', index=0, iid=0, text='', values=('1','Vineet','Alpha')) tv.insert(parent='', index=1, iid=1, text='', values=('2','Anil','Bravo')) tv.insert(parent='', index=2, iid=2, text='', values=('3','Vinod','Charlie')) tv.insert(parent='', index=3, iid=3, text='', values=('4','Vimal','Delta')) tv.insert(parent='', index=4, iid=4, text='', values=('5','Manjeet','Echo')) tv.pack() ws.mainloop()
Значение изменения дерева Python Tkinter
- В этом разделе мы узнаем, как изменить значение Python Tkinter Treeview Value .
- В случае Treeview есть два типа значений.
- Один из них — это значение заголовка, которое мы видим в верхней части таблицы.
- Еще одна запись, которую мы видим на столе.
- чтобы изменить значение заголовка, мы должны изменить его как в столбцах, так и в заголовках. для лучшего понимания мы отметили обе вещи на рисунке ниже.
- Мы предположили, что хотим изменить значение заголовка с 1 на что-то другое.
- Чтобы изменить значение записи, мы должны создать функцию, которая изменит значение выбранного элемента в дереве Python Tkinter.
- В этом разделе мы будем изменять только один элемент записи.
- tkk.tree.focus возвращает выбранную строку элемента в древовидном представлении. Если ничего не выбрано, возвращается пустая строка («»).
- ttk.tree.item() принимает tkk.tree.focus в качестве аргумента, за которым следует « значение ». Это вернет все значения в выбранном элементе. Эти значения возвращаются в кортеже .
- Разберемся в этом на примере, в котором зарплата выбранного сотрудника будет увеличена на 5% от текущей.
Код:
В этом коде обратите внимание на функцию update_item .
tv.focus()
удерживайте номер строки выбранного элемента в Treeview, а значение для него хранится в переменной с именем selected. Вы можете просмотреть это, используя функцию печати.print(selected)
.- tv.item() принимает 2 аргумента, выбранные и значения. Это означает, что из выбранной строки отображаются все значения. Эти значения будут отображаться в формате кортежа. Это хранится в переменной с именем temp .
- используя temp[0], temp[1], temp[2] мы можем получить доступ к элементам в кортеже.
- Переменная sal_up содержит расчет для увеличения заработной платы.
- Метод tv.item() используется для предоставления новых значений записи.
from tkinter import * from tkinter import ttk ws = Tk() ws.title("PythonGuides") tv = ttk.Treeview(ws, columns=(1, 2, 3), show='headings', height=8) tv.pack() tv.heading(1, text="name") tv.heading(2, text="eid") tv.heading(3, text="Salary") def update_item(): selected = tv.focus() temp = tv.item(selected, 'values') sal_up = float(temp[2]) + float(temp[2]) * 0.05 tv.item(selected, values=(temp[0], temp[1], sal_up)) tv.insert(parent='', index=0, iid=0, values=("vineet", "e11", 1000000.00)) tv.insert(parent='', index=1, iid=1, values=("anil", "e12", 120000.00)) tv.insert(parent='', index=2, iid=2, values=("ankit", "e13", 41000.00)) tv.insert(parent='', index=3, iid=3, values=("Shanti", "e14", 22000.00)) Button(ws, text='Increment Salary', command=update_item).pack() style = ttk.Style() style.theme_use("default") style.map("Treeview") ws.mainloop()
В этом выводе отображается Python Tkinter Treeview . У нас есть образцы данных о сотрудниках. Кнопка внизу содержит функцию увеличения заработной платы выбранного сотрудника на 5%. Шанти проделала отличную работу, она заслуживает повышения. Ее предыдущая зарплата была 22000, после применения надбавки на 5% она стала 23100.
Полосы прокрутки Python Tkinter в виде дерева
Полосы прокрутки — сложный термин для начинающих и один из широко используемых виджетов, который вы не можете игнорировать. Итак, в этом разделе Python Tkinter Treeview мы научимся создавать полосы прокрутки для Treeview.
- Лучшей практикой реализации полосы прокрутки является использование виджета фрейма.
- Виджет Frame может содержать другие виджеты. Итак, мы разместим на фрейме виджеты Treeview и полосы прокрутки.
- команда для создания полосы прокрутки:
sb = Scrollbar(frame, orient=VERTICAL)
- мы помещаем этот виджет в рамку
- ориентация определяет, будут ли полосы прокрутки горизонтальными или вертикальными .
- команда для размещения полосы прокрутки на экране
sb.pack(side=RIGHT, fill=Y)
- Treeview будет упакован в LEFT , а полосы прокрутки – в RIGHT .
fill=Y
заполнит полосу прокрутки в доступном пространстве. Это заставит полосу прокрутки выглядеть больше, чем ее фактический размер.
- Настройка или привязка полосы прокрутки к Treeview — самый важный шаг.
tv.config(yscrollcommand=sb.set)
эта команда настраивает Treeview и связывает его с полосой прокрутки.sb.config(command=tv.yview)
эта команда настраивает полосу прокрутки и связывает ее с Treeview.
Таким образом, мы можем реализовать полосу прокрутки с помощью Treeview. Так как мы использовали фрейм здесь, этот метод может быть реализован на любом виджете, и вы избавите себя от путаницы. Надеюсь, вы поняли, как использовать полосы прокрутки в Python Tkinter Treeview. У нас также есть небольшое приложение с реализацией полосы прокрутки.
Примечание. Если вы правильно реализовали полосу прокрутки, но по-прежнему не отображаются должным образом, увеличьте количество строк в данных.
Код:
В этом коде мы перенесли предыдущее приложение предоставления приращения сотрудникам. Но на этот раз у нас больше сотрудников. Поскольку экрана недостаточно для отображения всех данных, мы использовали полосы прокрутки.
from tkinter import * from tkinter import ttk ws = Tk() ws.title("PythonGuides") frame = Frame(ws) frame.pack(pady=20) tv = ttk.Treeview(frame, columns=(1, 2, 3), show='headings', height=8) tv.pack(side=LEFT) tv.heading(1, text="name") tv.heading(2, text="eid") tv.heading(3, text="Salary") sb = Scrollbar(frame, orient=VERTICAL) sb.pack(side=RIGHT, fill=Y) tv.config(yscrollcommand=sb.set) sb.config(command=tv.yview) def update_item(): selected = tv.focus() temp = tv.item(selected, 'values') sal_up = float(temp[2]) + float(temp[2]) * 0.05 tv.item(selected, values=(temp[0], temp[1], sal_up)) tv.insert(parent='', index=0, iid=0, values=("vineet", "e11", 1000000.00)) tv.insert(parent='', index=1, iid=1, values=("anil", "e12", 120000.00)) tv.insert(parent='', index=2, iid=2, values=("ankit", "e13", 41000.00)) tv.insert(parent='', index=3, iid=3, values=("Shanti", "e14", 22000.00)) tv.insert(parent='', index=4, iid=4, values=("vineet", "e11", 1000000.00)) tv.insert(parent='', index=5, iid=5, values=("anil", "e12", 120000.00)) tv.insert(parent='', index=6, iid=6, values=("ankit", "e13", 41000.00)) tv.insert(parent='', index=7, iid=7, values=("Shanti", "e14", 22000.00)) tv.insert(parent='', index=8, iid=8, values=("vineet", "e11", 1000000.00)) tv.insert(parent='', index=9, iid=9, values=("anil", "e12", 120000.00)) tv.insert(parent='', index=10, iid=10, values=("ankit", "e13", 41000.00)) tv.insert(parent='', index=11, iid=11, values=("Shanti", "e14", 22000.00)) Button( ws, text='Increment Salary', command=update_item, padx=20, pady=10, bg='#081947', fg='#fff', font=('Times BOLD', 12) ).pack(pady=10) style = ttk.Style() style.theme_use("default") style.map("Treeview") ws.mainloop()
В этом выводе данные отображаются в дереве Python Tkinter. Вы можете увидеть полосу прокрутки, добавленную в окно. Неважно, сколько данных в него добавлено, но его можно просмотреть, прокручивая окно.
Python Tkinter TreeView Вставка
метод экземпляра tkinter.ttk.Treeview Создает новый элемент и возвращает идентификатор вновь созданного элемента.
Синтаксис :
insert(parent, index, iid=None, **kw)
- parent — это идентификатор родительского элемента или пустая строка для создания нового элемента верхнего уровня.
- index является целым числом или конечным значением, указывающим , в какой список дочерних элементов родителя вставить новый элемент. Если индекс меньше или равен нулю, новый узел вставляется в начало, а если индекс больше или равен текущему количеству дочерних элементов, он вставляется в конец.
- iid используется как идентификатор элемента, iid не должен уже существовать в дереве. В противном случае генерируется новый уникальный идентификатор.
Выбор дерева Python Tkinter
- Выбор в Python Tkinter Treeview возвращает кортеж выбранных элементов.
- Метод Selection возвращает индекс строки выбранных элементов в Treeview.
- Он может возвращать более одного индекса одновременно в формате кортежа.
- Выбор полезен во многих отношениях, значение выбора можно сохранить в переменной, а затем с помощью if-else его можно поставить в условие.
- Зная строку, можно получить доступ к элементам этой строки или изменить их, указав порядковый номер.
- пример: строка[3], строка[1], строка[2]
Код:
В этом коде обратите внимание на функцию show_selected() . здесь print(tv.selection())
печатает выбранную строку.
from tkinter import * from tkinter import ttk def show_selected(): print(tv.selection()) ws = Tk() ws.title('PythonGuides') tv = ttk.Treeview( ws, columns=(1, 2, 3), show='headings', height=3 ) tv.pack() tv.heading(1, text='roll number') tv.heading(2, text='name') tv.heading(3, text='class') tv.insert(parent='', index=0, iid=0, values=(21, "Krishna", 5)) tv.insert(parent='', index=1, iid=1, values=(18, "Bhem", 3)) tv.insert(parent='', index=2, iid=2, values=(12, "Golu", 6)) tv.insert(parent='', index=3, iid=3, values=(6, "amul", 3)) tv.insert(parent='', index=4, iid=4, values=(12, "nestle", 6)) tv.insert(parent='', index=5, iid=5, values=(6, "zebronics", 3)) style = ttk.Style() style.theme_use("default") style.map("Treeview") Button(ws, text="Show Selected", command=show_selected).pack() ws.mainloop()
В этом выводе сначала мы выбрали один и нажали кнопку. поэтому в выводе мы можем заметить ('1',)
. Это означает, что выбрана строка по индексу 1. Теперь, когда мы выбрали две строки и нажали кнопку, она дала нам, ('1', '2')
что означает, что строки с индексом 1 и индексом 2 выбраны, как мы можем видеть на рисунке.
Ширина дерева Python Tkinter
В этом разделе Python Tkinter Treeview мы узнаем, как реализовать ширину в Treeview.
- Ширина — это горизонтальная длина каждого столбца в дереве.
- Изменение ширины приведет к изменению горизонтального пространства приложения.
- Ширина объявляется в разделе столбца. Это не обязательная опция.
- по умолчанию каждый столбец имеет ширину 20 пикселей.
Таблица дерева Python Tkinter
- Python Tkinter Treeview — это табличное представление данных, поскольку оно обладает всеми свойствами таблицы.
- Treeview имеет строки, столбцы и заголовок.
- rows : горизонтальное пространство, определяемое данными. Больше данных, больше строк.
- столбцы : вертикальное пространство определяет заголовок. Больше заголовков, больше столбцов.
- заголовок : Заголовок находится в верхней строке.
Высота дерева Python Tkinter
В этом разделе Python Tkinter Treeview мы узнаем, как реализовать высоту.
- Высота — это вертикальная длина Treeview.
- Он также определяет количество строк в Treeview.
- Изменение высоты приведет к изменению количества строк, отображаемых на экране.
Синтаксис:
tv = ttk.Treeview(ws, columns=(1, 2, 3), show='headings', height=3)
tv.pack(side=LEFT)
Код:
В этом коде мы установили высоту = 5 , что означает, что будут отображаться только 5 строк. Мы также пробовали height=3 . Итак, вы пытаетесь изменить эти значения.
from tkinter import * from tkinter import ttk ws = Tk() ws.title('PythonGuides') tv = ttk.Treeview( ws, columns=(1, 2, 3), show='headings', height=5 #height=3 ) tv.pack() tv.heading(1, text='roll number') tv.heading(2, text='name') tv.heading(3, text='class') tv.insert(parent='', index=0, iid=0, values=(21, "Krishna", 5)) tv.insert(parent='', index=1, iid=1, values=(18, "Bhem", 3)) tv.insert(parent='', index=2, iid=2, values=(12, "Golu", 6)) tv.insert(parent='', index=3, iid=3, values=(6, "amul", 3)) tv.insert(parent='', index=4, iid=4, values=(12, "nestle", 6)) tv.insert(parent='', index=5, iid=5, values=(6, "zebronics", 3)) style = ttk.Style() style.theme_use("default") style.map("Treeview") ws.mainloop()
В этом выводе отображаются два изображения. Первое изображение имеет высоту=5 , а второе изображение имеет высоту=3 .
Режим выбора Python Tkinter TreeView
В этом разделе мы поймем, что такое Selectmode и типы Selectmode в Python Tkinter Treeview.
- Selectmode управляет тем, как встроенные привязки классов управляют выбором. Есть три способа сделать это:
- расширенный: позволяет пользователю выбирать несколько элементов.
- просматривать: позволяет выбрать только один элемент за раз.
- нет: выбор не будет изменен, пользователь щелкнет, но ничего не будет выбрано.
Синтаксис:
вместо « none » можно указать « расширенный » или «просмотреть» в соответствии с использованием.
tv = Treeview(ws, selectmode="none")
tv.pack()
Код:
В этом коде мы реализовали все три метода Python Tkinter Selectmode. Мы выделили три кнопки, каждая из которых выполняет свою задачу.
- Когда ни одна кнопка не нажата, пользователь не увидит никаких маркировок в дереве.
- При нажатии кнопки обзора пользователь сможет выбрать один элемент за раз.
- При нажатии расширенной кнопки пользователь сможет выбрать несколько элементов одновременно.
- нажмите и удерживайте клавишу Shift на клавиатуре, чтобы выбрать несколько элементов.
from tkinter import * from tkinter import ttk def selectmode_none(): tv['selectmode']="none" def selectmode_browse(): tv['selectmode']="browse" def selectmode_extended(): tv['selectmode']="extended" ws = Tk() tv = ttk.Treeview( ws, columns=(1, 2, 3), show='headings', height=8 ) tv.pack() tv.heading(1, text='roll number') tv.heading(2, text='name') tv.heading(3, text='class') tv.insert(parent='', index=0, iid=0, values=(21, "Krishna", 5)) tv.insert(parent='', index=1, iid=1, values=(18, "Bhem", 3)) tv.insert(parent='', index=2, iid=2, values=(12, "Golu", 6)) tv.insert(parent='', index=3, iid=3, values=(6, "Priya", 3)) b1 = Button( ws, text="Browse", pady=20, command=selectmode_browse ) b1.pack(side=LEFT, fill=X, expand=True) b2 = Button( ws, text="None", pady=20, command=selectmode_none ) b2.pack(side=LEFT, fill=X, expand=True) b3 = Button( ws, text="Extended", pady=20, command=selectmode_extended ) b3.pack(side=LEFT, fill=X, expand=True) style = ttk.Style() style.theme_use("default") style.map("Treeview") ws.mainloop()
В этом выводе отображается простое приложение Python Tkinter Treeview . Внизу есть три кнопки, которые изменяют режим выбора древовидного списка.