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

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

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

Дерево каталогов с ttk.Treeview, а также прокрутка и стили элементов

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

Ниже (рисунок 1) представлена программ, которая создаёт дерево каталогов файловой системы, начиная с указанного каталога в Treeview.

В поле ввода внизу набирается путь к каталогу и после нажатия клавиши Enter появляется дерево начиная с данного каталога, при этом удаляется уже существующее дерево. Проверяется также существует ли введённый каталог или нет. В заголовке окна отражается процесс поиска, после поиска в заголовке отображается начальный каталог.

Рисунок 1. Программа, представляющая в Treeview дерево каталогов. Весь текст программы см. смотри ниже по ссылке
Рисунок 1. Программа, представляющая в Treeview дерево каталогов. Весь текст программы см. смотри ниже по ссылке
primer365.py

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

  • Алгоритм обхода дерева каталогов будем основывать на моей же статье (первая программа). Я несколько видоизменил функцию search(), но алгоритм в целом остался тот же. Обратим внимание на использование библиотеки os и stat (см. статью, указанную выше по ссылке). Для объединения пути к уже существующему пути используем метод os.path.join(), работающий в разных операционных системах
  • Обращу внимание на следующий механизм программы: глобальная переменная n и параметр m в рекурсивной функции search(). Если n это всегда текущий идентификатор добавляемого элемента, то m идентификатор родительского элемента.
  • Обратим внимание на то, как "прикручивается" полоса прокрутки к Treeview. В начале создаётся объект tkinter.Scrollbar(). Далее важно в Scrollbar.pack() указать fill=tk.Y. Это означает, прокрутка будет "работать" только по вертикали. Далее в Scrollbar.configure() указываем command=tree.yview, т.е. осуществляем ту самую "прикрутку" к дереву. Наконец в Treeview.config() указываем yscrollcommand=self.sc.set, т.е. обработчик вертикального движения по дереву.
  • Далее, мне не понравился размер шрифта по умолчанию в Treeview. Но при увеличении шрифта нужно было увеличить и высоту элементов дерева. Для этого создаётся объект ttk.Style() и далее
    Style.configure('Treeview', rowheight = 40, font = (None, 20)) устанавливаем размер шрифта и высоту элемента дерева.
  • Для ввода начального каталога для поиска создаём объект-строку ввода tkinter.Entry - это объект мы уже неоднократно использовали. Да, и метод Entry.focus_set() сразу устанавливает фокус ввода на данный объект окна.
  • Обработка нажатия клавиши в Entry происходит известным уже нам способом (см. функцию key()). Здесь обращу внимание на метод os.path.exists(), который устанавливает существование указанного файла. Метод Tk.update() необходим, что изменить заголовок окна и появился корень дерева.
Рисунок 2. Окно программы с деревом каталогов
Рисунок 2. Окно программы с деревом каталогов

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

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

 И повел Он программиста к дереву каталогов, и заповедал: из всякого каталога можешь запускать программы, только из каталога Windows не запускай
И повел Он программиста к дереву каталогов, и заповедал: из всякого каталога можешь запускать программы, только из каталога Windows не запускай