Доброго времени суток, читатели, зрители моего канала programmer's notes. Не забывайте подписываться и писать свои комментарии к моим статьям и видео.
Дерево каталогов с ttk.Treeview, а также прокрутка и стили элементов
Как я уже писал, мне нравится когда есть и технология и алгоритмическая составляющая. Сегодня как раз тот случай. Напишем программу, где с помощью Treeview можно представлять любую часть дерева каталогов начиная с указанного. Сам алгоритм обхода дерева каталогов будем основывать на моей же статье (первая программа).
Ниже (рисунок 1) представлена программ, которая создаёт дерево каталогов файловой системы, начиная с указанного каталога в Treeview.
В поле ввода внизу набирается путь к каталогу и после нажатия клавиши Enter появляется дерево начиная с данного каталога, при этом удаляется уже существующее дерево. Проверяется также существует ли введённый каталог или нет. В заголовке окна отражается процесс поиска, после поиска в заголовке отображается начальный каталог.
Пояснение к программе
- Алгоритм обхода дерева каталогов будем основывать на моей же статье (первая программа). Я несколько видоизменил функцию 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() необходим, что изменить заголовок окна и появился корень дерева.
Пока всё! Продолжение следует...
Пишите свои предложения и замечания, и занимайтесь программированием, а также проектированием баз данных, хотя бы для поддержания уровня интеллекта.