PyMailGUI: главный модуль

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

В примере 14.1 приводится файл, который запускает программу Py- MailGUI. Он реализует окна верхнего уровня со списками сообщений — комбинацию прикладной логики PyMailGUI и суперклассов оконного протокола, реализованных ранее в этой книге. Эти суперклассы определяют заголовки окон, значки и поведение при закрытии.

Кроме того, в этом модуле находится основная документация для разработчиков и логика обработки параметров командной строки — программа принимает из командной строки имена одного или более файлов с сохраненной в них почтой и автоматически открывает их при запуске графического интерфейса. Эта особенность, например, используется панелью запуска PyDemos, представленной в главе 10.

Пример 14.1. PP4E\Internet\Email\PyMailGui\PyMailGui.py

############################################################################ PyMailGui 3.0 — почтовый клиент Python/tkinter.

Клиентский графический интерфейс на базе tkinter для отправки и приема электронной почты.

Смотрите строку с текстом справки в PyMailGuiHelp.py, где приводится информация об использовании, и список предлагаемых расширений этой версии.

Версия 2.0 была полностью переписана. Изменения между версиями 2.0 (июль 2005) и 2.1 (январь 2006): кнопки быстрого доступа в окнах просмотра, выполнение в потоках операций загрузки и удаления сообщений в локальных файлах, проверка и восстановление синхронизации с почтовым ящиком на сервере по номерам сообщений при удалении, загрузке оглавления и загрузке сообщений.

Версия 3.0 (4E) является результатом переноса для работы под управлением Python 3.X; использует компоновку по сетке вместо фреймов колонок для улучшения размещения полей заголовков в окнах просмотра; вызывает метод update() после вставки нового текстового редактора, чтобы обеспечить более точное позиционирование текстового курсора (смотрите изменения метода loadFirst в PyEdit, в главе 11); предоставляет HTML-версию текста справки; извлекает простой текст из основных частей в формате HTML для отображения и цитирования; поддерживает разделители в панелях инструментов; решает проблему выбора кодировки для тела сообщения и заголовков при получении, отправке и сохранении почты (см. главы 13 и 14); и многое другое (см. главу 14, где приводится полный перечень изменений в версии 3.0); декодирование полученного сообщения выполняется глубоко в недрах пакета mailtools, при выполнении операций загрузки в кэш; кроме того, пакет mailtools исправляет некоторые ошибки пакета email (см. главу 13);

Этот файл реализует окна верхнего уровня и интерфейс. PyMailGui использует ряд модулей, которые ничего не подозревают об этом графическом интерфейсе, но решают свои задачи, часть из которых была реализована в других разделах книги. Модуль mailconfig расширен для использования в этой программе.

==Модули, определяемые в другом месте и используемые здесь:==

mailtools (пакет)

глава, посвященная созданию клиентских сценариев

отправляет на сервер и принимает с сервера, анализирует, конструирует (пример 13.21+)

threadtools.py

глава об инструментах графического интерфейса

управление очередью обработчиков графического интерфейса (пример 10.20) windows.py

глава об инструментах графического интерфейса

настройка рамок окон верхнего уровня (пример 10.16)

textEditor.py

глава с примерами программ с графическим интерфейсом

текстовый виджет, используемый в окнах просмотра сообщений, некоторые диалоги (пример 11.4)

==В целом полезные модули, определяемые здесь:==

popuputil.py

диалог с текстом справки и диалоги с информацией о ходе

выполнения операций для общего использования

messagecache.py

кэш для слежения за уже загруженными сообщениями

wraplines.py

утилита переноса длинных строк в сообщениях

html2text.py

упрощенный механизм преобразования HTML в простой текст

mailconfig.py

пользовательские параметры: имена серверов, шрифты и так далее

==Модули программы, определяемые здесь:==

SharedNames.py

объекты, совместно используемые классами окон и главным файлом ViewWindows.py

реализация окон просмотра, создания, ответа и пересылки ListWindows.py

реализация окон со списками содержимого почтового ящика

на сервере и локальных файлов

PyMailGuiHelp.py (see also PyMailGuiHelp.html)

текст справки для пользователя, который выводится щелчком

на полосе вызова справки в главном окне

PyMailGui.py

главный файл верхнего уровня (запускает программу) с типами главного окна ############################################################################

import mailconfig, sys

from SharedNames import appname, windows

from ListWindows import PyMailServer, PyMailFile

############################################################################ # классы окон верхнего уровня

#

#   Все окна просмотра, создания, ответа, пересылки, справки и диалоги

#   с информацией о ходе выполнения операции являются прямыми наследниками

#   класса PopupWindow: только используется; askPasswordWindow вызывает

#   конструктор PopupWindow и прикрепляет виджеты к полученному окну;

#   порядок здесь имеет большое значение! — классы PyMail переопределяют

#   некоторые методы по умолчанию в классах окон, такие как destroy

#   и okayToExit: они должны указываться первыми;

#   чтобы использовать PyMailFileWindow отдельно, необходимо

#   имитировать логику PyMailCommon.onOpenMailFile;

############################################################################

#   использует файл значка в cwd или в каталоге по умолчанию tools

srvrname = mailconfig.popservername or ‘Server’

class PyMailServerWindow(PyMailServer, windows.MainWindow):

"окно Tk с расширенным протоколом и подмешанными методами"

def __init__(self):

windows.MainWindow.__init__(self, appname, srvrname) PyMailServer.__init__(self)

class PyMailServerPopup(PyMailServer, windows.PopupWindow):

"окно Toplevel с расширенным протоколом и подмешанными методами"

def __init__(self):

windows.PopupWindow.__init__(self, appname, srvrnane) PyMailServer.__init__(self)

class PyMailServerComponent(PyMailServer, windows.ComponentWindow): "фрейм Frame с расширенным протоколом и подмешанными методами"

def __init__(self):

windows.ComponentWindow.__init__(self) PyMailServer.__init__(self)

class PyMailFileWindow(PyMailFile, windows.PopupWindow):

"окно Toplevel с расширенным протоколом и подмешанными методами"

def __init__(self, filename):

windows.PopupWindow.__init__(self, appname, filename) PyMailFile.__init__(self, filename)

############################################################################ # когда выполняется как программа верхнего уровня: создает главное окно

#   со списком сообщений на сервере

############################################################################

if __name__ == ‘__main__’:

rootwin = PyMailServerWindow() # открыть окно для сервера

if len(sys.argv) > 1: # 3.0: исправ. для добавл. len()

for savename in sys.argv[1:]:

rootwin.onOpenMailFile(savename) # открыть окна # для файлов (демо) rootwin.lift() # сохранить файлы, загруженные

rootwin.mainloop() # в потоках

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

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

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