Программа PyMailGUI имеет многооконный интерфейс. Он включает следующее:
• Главное окно со списком сообщений, открываемое при запуске программы, — для обработки почты на сервере.
• Одно или более окон с оглавлением содержимого в файлах с сохраненными сообщениями — для обработки почты без подключения к Интернету.
• Одно или более окон для просмотра и редактирования содержимого почтовых сообщений.
• Окна PyEdit для отображения необработанного текста почтовых сообщений, текстовых вложений и исходного программного кода системы.
• Неблокирующие диалоги с информацией о ходе выполнения операции.
• Различные диалоги, предназначенные для открытия частей сообщения, вывода справки и другие.
С технической точки зрения PyMailGUI выполняется как множество параллельных потоков, которые могут действовать одновременно: по одному для каждой операции передачи почты между программой и сервером и по одному для каждой операции загрузки, сохранения или удаления сообщений в файлах. Программа PyMailGUI поддерживает сохранение почты в файлах, автоматически сохраняет отправленные сообщения, обеспечивает возможность настройки шрифтов и цветов, позволяет просматривать и добавлять вложения, извлекает основной текст сообщения, преобразует содержимое в формате HTML в простой текст и обеспечивает множество других возможностей.
Чтобы легче было понять этот практический пример, рассмотрим вначале операции, которые выполняет программа PyMailGUI, — взаимодействие с пользователем и функции обработки почты — и только потом обратимся к программному коду Python, реализующему их. При чтении этого материала не стесняйтесь заглядывать в листинги, которые следуют за снимками экранов, но обязательно прочтите также этот раздел, где я объясняю некоторые тонкости конструкции PyMailGUI. После этого раздела вы можете самостоятельно изучать листинги с программным кодом; это дает лучшее и более полное объяснение, чем написанное на естественном языке.
Запуск
Итак, пришло время испытать систему в действии. Я буду демонстрировать работу программы на моем ноутбуке с Windows 7. На других платформах (включая другие версии Windows) интерфейс программы будет выглядеть несколько иначе благодаря поддержке инструментами графического интерфейса внешнего вида, свойственного конкретной платформе, но основная функциональность при этом останется прежней.
PyMailGUI — это программа Python/tkinter, запускаемая выполнением файла сценария верхнего уровня PyMailGUI.py. Как и другие программы на языке Python, PyMailGUI можно запускать из командной строки, щелчком на значке с именем его файла в окне менеджера файлов или нажатием кнопки в панелях запуска PyDemos или PyGadgets. Независимо от способа запуска сначала PyMailGUI выводит окно, изображенное на рис. 14.1 и полученное после щелчка на кнопке Load (Загрузить), чтобы загрузить заголовки с почтового сервера моего интернет-провайдера. Обратите внимание на ярлык окна с изображением символов «PY»: это результат работы инструментов поддержки протоколов оконного интерфейса, которые мы написали ранее в этой книге. Обратите также внимание на строки с заголовками, содержащие символы, не входящие в диапазон ASCII, — я буду рассказывать об особенностях поддержки реализации позднее.
Рис. 14.1. Главное окно PyMailGUI со списком сообщений на сервере
Это главное окно PyMailGUI — отсюда начинаются все операции. Оно нам предоставляет:
• Кнопку справки (полоса вверху).
• Область для списка полученных почтовых сообщений (средняя часть), на которой можно щелкнуть мышью.
• Нижнюю панель с кнопками для обработки сообщений, выделенных в области списка.
Обычно пользователь загружает свою почту, выбирает щелчком сообщение в области списка и нажимает одну из нижних кнопок для его обработки. При запуске программы не выводится никаких сообщений — их необходимо загрузить, щелкнув на кнопке Load (Загрузить), после чего отображается простой диалог ввода пароля, затем диалог с информацией о ходе выполнения операции, где ведется обратный отсчет заголовков сообщений, которые осталось загрузить, и затем список заполняется сообщениями, готовыми для выбора.
Окно программы PyMailGUI с оглавлением, изображенное на рис. 14.1, отображает информацию из заголовков в колонках фиксированной ширины и может распахиваться до максимального размера. Почтовые сообщения с вложениями отмечаются символом «*» в колонке с порядковыми номерами, а шрифты и цвета в этом и других окнах PyMailGUI можно настроить в модуле mailconfig. На черно-белых изображениях в этой книге не видно, но большинство окон со списками сообщений, которые мы увидим, имеют красный фон, окна просмотра содержимого — светло-голубой, окна PyEdit — бежевый, вместо привычного бирюзового, а окно справки — синевато-стальной цвет. Большинство из них вы можете изменить по своему вкусу, а внешний вид окон PyEdit можно изменить в самом графическом интерфейсе (образец определения цвета смотрите в примере 8.11 и альтернативные примеры настроек — далее).
Окна со списками сообщений позволяют выбирать одновременно несколько сообщений — операция, выбранная в панели инструментов внизу окна, применяется ко всем выбранным письмам. Например, чтобы просмотреть содержимое нескольких писем, выберите их в списке и щелкните на кнопке View (Просмотреть) — программа загрузит (при необходимости) их с сервера и отобразит каждое из них в отдельном окне просмотра. Используйте флажок All (Все) в правом нижнем углу, чтобы выбрать все сообщения в списке. Чтобы выбрать не все, а только несколько сообщений, щелкайте мышью, удерживая клавишу Ctrl или Shift (стандартная операция выбора нескольких элементов из списка, используемая в Windows, — попробуйте сами).
Однако прежде чем двинуться дальше, нажмем на изображенную на рис. 14.1 полосу над списком вверху окна и посмотрим имеющуюся справку. На рис. 14.2 изображено окно текстовой справки, которое при этом появляется, — одной из двух имеющихся разновидностей справки.
PJ PyMailGUI 3.0 — Help h=H|-&
PyMailGUI, version 3.0
May. 2010 (2.1 January, 2006)
Programming Python. 4th Edition Mark Lutz, for O’Reilly Media. Inc.
PyMailGUI is a multiwindow interface for processing email, both online and offline. Its main interfaces include one list window for the mail server, zero or more list windows for mail save files, and multiple view windows for composing or viewing emails selected in a list window. On startup, the main (server) list window appears first but no mail server connection is attempted until a Load or message send request. All PyMailGUI windows may be resized, which is especially useful in list windows to see additional columns.
Note: To use PyMailGUI to read and write email of your own, you must change the POP and SMTP server names and login details in the file mailconfig.py, located in PyMailGUI’s source-code directory. See section 11 for details.
Contents:
0) VERSION ENHANCEMENTS
1) LIST WINDOW ACTIONS
2) VIEW WINDOW ACTIONS
3) OFFLINE PROCESSING
4) VIEWING TEXT AND ATTACHMENTS
5) SENDING TEXT AND ATTACHMENTS__
Source Cancel
Рис. 14.2. Всплывающее окно справки PyMailGUI
Основную часть этого окна составляют блок текста в текстовом виджете с прокруткой, а также две кнопки внизу. Весь текст справки представлен в программе, как одна строка в тройных кавычках. Как мы увидим чуть ниже, имеется также возможность открыть этот же текст в формате HTML в веб-броузере, но для многих вполне достаточно и простого текста. Кнопка Cancel (Отмена) закрывает это немодальное (то есть неблокирующее) окно. Следует отметить, что кнопка Source (Исходные тексты) открывает окна с текстовым редактором PyEdit для просмотра всех файлов с исходным программным кодом PyMailGUI. На рис. 14.3 показан один из таких файлов (их довольно много, но этот выбран наугад,
а не для демонстрации разработки). Не всякая программа покажет вам свои исходные тексты, но PyMailGUI следует лейтмотиву открытого программного обеспечения Python.
Рис. 14.3. Окно просмотра исходного программного кода PyMailGUI
Впервые в этом издании справка может также отображаться в формате HTML в окне веб-броузера, вместо или в дополнение к текстовой справке, которую мы только что видели. Выбор отображения справки в текстовом формате, в формате HTML или в обоих форматах одновременно определяется настройками в модуле mailconfig. Справка в формате HTML отображается с помощью модуля Python webbrowser, который открывает файл HTML в броузере на локальном компьютере, и в настоящее время не имеет кнопки открытия файлов с исходными текстами, присутствующей в окне с текстовой версией (еще одна из причин, почему может потребоваться инструмент просмотра текста). Справка в формате HTML изображена на рис. 14.4.
Когда сообщение для просмотра выбирается в главном окне и затем выполняется щелчок на кнопке View (Просмотреть), PyMailGUI загружает полный текст сообщения (если оно еще не было загружено в этом сеансе) и выводит окно просмотра сообщения, как показано на рис. 14.5, где изображено содержимое одного из сообщений в моем почтовом ящике.