Найти в Дзене
programmer's notes (python and more)

Программирование на языке Python. Библиотека tkinter. Табличное представление данных с помощью класса ttk.Treeview

Доброго времени суток, читатели, зрители моего канала programmer's notes. Не забывайте подписываться и писать свои комментарии к моим статьям и видео.

Представление таблиц с помощью ttk.Treeview

В tkinter нет специального класса для визуального представления таблиц. Но таблицу можно представить с помощью Treeview. Что тут скажешь, конечно, в PyQt5 (см. здесь и здесь) таблицы богаче. Но для представления данных таблицы tkinter тоже сгодятся.

Ниже представлена программа, которая в окне создаёт таблицу (см. Рисунок 2) и обрабатывает щелчки мыши по полям и заголовкам таблицы выводит значения на консоль.

Рисунок 1. Программа создающая окно и таблицу в нём. Текст программы см. ниже по ссылке
Рисунок 1. Программа создающая окно и таблицу в нём. Текст программы см. ниже по ссылке
primer366.py

Примеры вывода на консоль обработку щелчков мыши по полям строк и заголовкам колонок.

Колонка: name (ФИО)
Строка: 2
Поле: Васильев
Заголовок
date (Дата)
Колонка: position (Должность)
Строка: 1
Поле: Техник

Пояснение к программе

  • Таблица создаётся как и дерево методом ttk.Treeview(), но параметр show="headings".
  • В переменных (массивах) cols и tx хранятся заголовки колонок таблицы и их названия. Командой self.table.heading(cols[i], text=tx[i]) задается конкретная колонка (столбец).
  • Строки таблицы задаются списком rows. В каждой строке задаются поля в соответствие с колонками (см. выше). Выражение self.table.insert("", index=tk.END, values=t) как раз задаёт конкретную строку, где t элемент списка rows.
  • "Прикручивание" полосы прокрутки осуществляется также как в предыдущей статье.
  • Обрабатываются два события: щелчок мыши по элементу таблицы (self.kl()) и выбор строки (self.self.cl()). При этом щелчок по заголовку не обрабатывается вторым методом. Вызывается в начале первый метод потом второй.
  • В первом обработчике получаем номер столбца: c = int(self.table.identify_column(x)[1:]) - 1, номер строк: int(self.table.identify_row(y)[1:]) - 1. По идентификатору строки cn определяем также не является ли это просто заголовок колонки (cn=="").
  • В обработчике выводим информацию: колонку, номер строки, значение поля. При этом в начале получаем элемент таблицы self.table.item(self.table.focus()), а потом вытаскиваем само поле el['values'][c].
Рисунок 2. Окно программы с таблицей от TreeView (см. Рисунок 1)
Рисунок 2. Окно программы с таблицей от TreeView (см. Рисунок 1)

Пока всё! Продолжение следует...

Пишите свои предложения и замечания, и занимайтесь программированием, а также проектированием баз данных, хотя бы для поддержания уровня интеллекта.

Если таблица по ширине не умещается на экран - это плохая таблица
Если таблица по ширине не умещается на экран - это плохая таблица