Реализация PyMailGUI

realizaciya pymailgui Почтовый клиент PyMailGUI Python

В конце концов, мы добрались до программного кода. Программа PyMa- ilGUI состоит из нескольких новых модулей, перечисленных в начале главы, а также нескольких дополнительных файлов, описанных там же. Исходный программный код этих модулей приводится в этом разделе. Прежде чем двинуться дальше, следует сделать два небольших напоминания, которые помогут в изучении:

Повторное использование программного кода

Программа PyMailGUI получает существенный выигрыш от повторного использования модулей, которые мы написали раньше и не будем повторять здесь: mailtools — реализует операции загрузки, составления, анализа и удаления почты; threadtools — управляет потоками выполнения, взаимодействующими с сервером и локальными файлами; TextEditor, из части книги, посвященной графическим интерфейсам, — реализует отображение и редактирование текста почтовых сообщений; и так далее. Список номеров примеров приводится в начале этой главы

Кроме того, здесь используются стандартные модули и пакеты Python, такие как poplib, smtplib и email, скрывающие большую часть действий по пересылке байтов по Сети, извлечению и конструированию частей сообщений. Библиотека tkinter реализует компоненты графического интерфейса с поддержкой переносимости.

Организация программного кода

Как уже упоминалось выше, для повышения степени повторного использования программного кода в PyMailGUI применяются приемы выделения общего программного кода и ООП. Например, окна просмотра списков реализованы как общий суперкласс, в котором запрограммировано большинство операций, и два подкласса: один создает окно со списком входящей почты на сервере, а другой — окно со списком сообщений в локальном файле. Подклассы специализируют общий суперкласс под определенную среду хранения почты.

Такая архитектура отражает принцип действия самого графического интерфейса — окна со списками сообщений на сервере загружают почту с использованием протокола POP, а окна со списками сообщений в файлах загружают почту из локальных файлов. Однако компоновка графических элементов и базовые операции, общие для обоих видов окон, реализованы в суперклассе, чтобы избежать избыточности и упростить программный код. Подобный прием выделения общего программного кода применяется и к окнам просмотра сообщений: общий суперкласс окна просмотра повторно используется и специализируется подклассами окон создания нового сообщения, ответа и пересылки.

Чтобы упростить сопровождение программного кода, он был разделен на два основных модуля, отражающих структуру графического интерфейса, — один из них реализует операции для окон со списками, а другой — для окон просмотра сообщений. Если, к примеру, требуется отыскать реализацию кнопки, которая находится в окне просмотра или редактирования сообщения, для этого следует заглянуть в модуль реализации окна просмотра и найти метод, имя которого начинается со слова on, в соответствии с соглашением, использовавшимся при выборе имен для методов обработчиков. Текст на кнопке также можно применять для поиска в таблицах соответствия надписей на кнопках и обработчиков, используемых при конструировании окон. Операции, выполняемые в окнах со списками, в свою очередь следует искать в модуле реализации окна со списком.

Кроме того, реализация кэша сообщений была выделена в отдельный объект и модуль, а потенциально пригодные для многократного использования инструменты оформлены в виде импортируемых модулей (например, утилита переноса длинных строк и диалоги общего пользования). Программа PyMailGUI также включает главный модуль, в котором определяются классы запускаемых окон; упрощенный механизм преобразования разметки HTML в простой текст; модуль, содержащий текст справки в виде строки; модуль mailconfig с пользовательскими настройками (здесь используется версия, характерная для PyMailGUI) и несколько дополнительных файлов.

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

Одно предварительное замечание: в этом разделе отсутствует только один из 18 файлов с исходными текстами PyMailGUI — это файл инициализации пакета __init__.py. Данный файл содержит единственную строку комментария и в настоящее время не используется системой. Он присутствует исключительно с целью расширения в будущем, когда программа PyMailGUI, возможно, будет использоваться как пакет — некоторые из ее модулей вполне могут пригодиться в других программах. Однако в текущей реализации используются операции импортирования из того же каталога, а не относительно пакета, то есть предполагается, что система либо выполняется как программа верхнего уровня (импортирование выполняется из текущего каталога «.») или путь к каталогу с ней находится в списке sys.path (импортирование выполняется по абсолютному пути). В Python 3.X каталог пакета не включается в sys.path автоматически, поэтому, чтобы в будущем программу можно было использовать как пакет, необходимо изменить внутренние операции импортирования (например, переместить главный сценарий в дереве каталогов на уровень выше и повсюду использовать конструкцию from . import module). За дополнительными подробностями о пакетах и импортировании пакетов обращайтесь к другим ресурсам, таким как книга «Изучаем Python».

Использованная литература:

Марк Лутц — Программирование на Python, 4-е издание, II том, 2011

Каталог сайтов Всего.ру
Оцените статью
Секреты программирования
Добавить комментарий