Итак, перейдем к программному коду. В первую очередь рассмотрим модуль с настройками пользователя, который приводится в примере 11.1. Он предназначен главным образом для того, чтобы было удобнее определять параметры внешнего вида, отличные от значений по умолчанию. Редактор PyEdit реализован так, что может работать и без этого модуля, и если он содержит синтаксические ошибки. Этот файл предназначен, прежде всего, для использования редактором PyEdit, когда он запускается как самостоятельный сценарий (в этом случае файл с настройками импортируется из текущего каталога), но вы также можете определить собственную версию файла с настройками PyEdit в любом другом каталоге, включенном в путь поиска модулей.
Дополнительно о том, какие настройки загружаются редактором, смотрите исходный программный код textEditor.py далее. Содержимое этого файла импортируется двумя различными способами — одна инструкция импортирования, которая загружает настройки внешнего вида, предполагает, что этот модуль (а не содержащий его пакет) находится в пути поиска модулей, и пропускает его, если его не находит, а другая, загружающая настройки порядка выбора кодировок, всегда отыскивает этот файл, независимо от способа запуска. Ниже описывается, что означает такое деление настроек для клиентов:
• Поскольку первая операция импортирования, загружающая настройки внешнего вида, ищет файл в пути поиска модулей, а не в каталоге основного пакета, то для каждого клиентского приложения, в его домашнем каталоге, можно определить собственный файл textConfig.py и тем самым обеспечить индивидуальные настройки PyEdit для каждого клиента.
• Настройки порядка выбора кодировки, напротив, всегда загружаются из файла, находящегося в каталоге пакета, с использованием операции импортирования по относительному пути, потому что они имеют более важное значение и маловероятно, что они будут отличаться от одного приложения к другому. Используемая здесь операция импортирования по относительному пути в пакете является эквивалентом импортирования всего пакета от корня PP4E, но не зависит от структуры каталогов.
Пример 11.1. PP4E\Gui\TextEditor\textConfig.py
модуль с начальными настройками PyEdit (textEditor.py);
#
# Общие настройки
# закомментируйте любые настройки в этом разделе, чтобы принять настройки по
# умолчанию библиотеки Tk или программы; шрифт/цвет можно также менять из меню
# в графическом интерфейсе, а также менять размеры окон после их открытия;
# импортируются из пути поиска модулей: могут определять отдельные настройки
# для каждого клиентского приложения, игнорируется, если находится не в пути
# поиска модулей;
#
# начальные настройки шрифта # семейство, размер, стиль
font = (‘courier’, 9, ‘normal’) # например, стиль: ‘bold italic’
# начальные настройки цвета # по умолчанию = white, black
bg = ‘lightcyan’ # название цвета или шестнадцатеричный код RGB
fg = ‘black’ # например, ‘powder blue’, ‘#690f96’
# начальные настройки размеров
height = 20 # умолчания Tk: 24 строки
width = 80 # умолчания Tk: 80 символов
# нечувствительность к регистру при поиске
caseinsens = True # по умолчанию = 1/True (включена)
#
# 2.1: Порядок выбора кодировки для содержимого и имен файлов в операциях
# открытия и сохранения;
# опробует каждый случай из перечисленных ниже в указанном порядке, пока не
# будет обнаружен первый, дающий положительный результат; запишите во все
# переменные false/пустое значение/0, чтобы перейти к использованию умолчаний
# для вашей платформы (то есть ‘utf-8’ — в Windows, или ‘ascii’, ‘latin-1’
# или другая кодировка в иных системах, таких как Unix);
# savesUseKnownEncoding: 0=Нет, 1=Да, только для операции Save, 2=Да для
# операций Save и SaveAs;
# всегда импортируются из этого файла: sys.path — если главный модуль, иначе —
# относительно пакета;
#
# 1) Сначала выполняется попытка применить известную
# кодировку (например, из заголовка сообщения
# электронной почты)
opensAskUser = True # 2) Если True, далее выполняется запрос у пользователя
# (предварительно заполняется значением по умолчанию)
opensEncoding = ‘’ # 3) Если непустое значение, далее будет выполнена попытка # применить эту кодировку: ‘latin-1’, ‘cp500’
# 4) Далее выполняется попытка применить
# sys.getdefaultencoding() — системное значение
# по умолчанию
# 5) В крайнем случае текст передается в двоичном виде и
# используются алгоритмы Tk
savesUseKnownEncoding = 1 # 1) Если > 0, выполняется попытка применить
# кодировку, известную по последней операции Open
# или Save
savesAskUser = True # 2) Если True, далее выполняется запрос у
# пользователя (предварительно заполняется
# известным значением?)
savesEncoding = ‘’ # 3) Если непустое значение, далее будет выполнена
# попытка применить эту кодировку: ‘utf-8’ и так
# далее
# 4) В крайнем случае выполняется попытка применить
# sys.getdefaultencoding()
Использованная литература:
Марк Лутц — Программирование на Python, 4-е издание, I том, 2011