Вместо того чтобы заниматься дополнительными деталями интерфейса баз данных, которые можно легко найти в Интернете, в завершение этой главы я направлю вас к дополнительному примеру, демонстрирующему, как можно соединить технологии графических интерфейсов, с которыми мы познакомились ранее в книге, с технологиями постоянного хранения, представленными в этой главе. Этот пример называется PyForm — приложение с графическим интерфейсом на основе tkinter, предназначенное для просмотра и редактирования таблиц записей:
• Таблицы, которые просматривает программа, могут быть хранилищами shelve, файлами DBM, словарями в памяти или любыми другими объектами, которые имеют вид словаря.
• Записи в просматриваемых таблицах могут быть экземплярами классов, простыми словарями, строками или любыми другими объектами, которые могут быть преобразованы в словари и обратно.
Этот пример демонстрирует создание графического интерфейса и организацию постоянного хранения, однако он также иллюстрирует технологию проектирования программ на языке Python. Чтобы сохранить реализацию простой и не зависящей от типов данных, графический интерфейс PyForm написан в предположении, что таблицы имеют вид словаря словарей. Для поддержки различных типов таблиц и записей PyForm полагается на отдельные классы-оболочки, преобразующие таблицы и записи в предполагаемый протокол:
• На верхнем уровне таблицы трансляция происходит просто — хранилища модуля shelve, файлы DBM и словари в оперативной памяти имеют одинаковый интерфейс, основанный на ключах.
• Для вложенных записей в графическом интерфейсе предполагается, что хранимые элементы тоже имеют интерфейс словарей, но операции со словарями перехватываются классами, чтобы сделать записи совместимыми с протоколом PyForm. Записи, хранящиеся в виде строк, преобразуются в объекты словарей и обратно при выборке и сохранении. Записи, хранящиеся в виде экземпляров классов, транслируются в словари атрибутов и обратно. Более специальные виды трансляции можно добавить в новых классах-оболочках таблиц.
В результате PyForm можно использовать для просмотра и редактирования большого числа разных типов таблиц, несмотря на предполагаемый интерфейс словаря. При просмотре с помощью PyForm хранилищ shelve и файлов DBM изменения в таблицах, производимые в графическом интерфейсе, оказываются постоянными — они сохраняются в файлах хранилищ. При просмотре хранилища shelve с экземплярами классов PyForm становится, по существу, клиентом с графическим интерфейсом для простой объектной базы данных, созданной с помощью стандартных средств Python, обеспечивающих постоянное хранение. Чтобы просмотреть и изменить хранимые объекты с помощью PyForm, например, достаточно использовать следующий программный код:
import shelve
from formgui import FormGui # после создания хранилища
db = shelve.open(‘../data/castfile’) # повторно открыть файл shelve
FormGui(db).mainloop() # и перейти к просмотру существующего
# хранилища словарей
Для просмотра и изменения хранилища с экземплярами импортированного класса Actor можно использовать такой программный код:
from PP4E.Dbase.testdata import Actor
from formgui import FormGui # выполнять в каталоге TableBrowser
from formtable import ShelveOfInstance
testfile = ‘../data/shelve’ # имя внешнего файла
table = ShelveOfInstance(testfile, Actor) # обернуть хранилище # в объект Table
FormGui(table).mainloop() table.close() # для некоторых dbm необходимо
# явно вызывать метод close
На рис. 17.1 показано, как выглядит графический интерфейс приложения, выполняющегося под управлением Python 3.1 в Windows 7, при просмотре хранилища экземпляров классов. Этот сеанс работы с Py- Form был запущен командой, описанной в программном коде самопроверки модуля formtable: formtable.py shelve 1, без аргумента 1 (или с аргументом 0), чтобы избежать повторной инициализации хранилища в начале сеанса и сохранить изменения.
Рис. 17.1. PyForm отображает объекты класса Actor, находящиеся в хранилище shelve
Приложение PyForm также можно запустить из программы PyDemos, которую мы рассматривали в главе 10, однако в этом случае оно не будет сохранять изменения. Запустите пример на своем компьютере, чтобы получить более полное представление о том, как он действует. Хотя программа PyForm и не является универсальным средством просмотра хранимых объектов Python, тем не менее, она может служить простым интерфейсом к объектным базам данных.
Из-за нехватки места в этом издании я опущу исходный программный код этого примера и его описание. Чтобы поближе познакомиться с PyForm, смотрите содержимое следующего каталога в пакете с примерами к этой книге, информация о котором есть в предисловии:
C:\…\PP4E\Dbase\TableBrowser
Загляните, в частности, в подкаталог Documentation, где вы найдете файл PDF с обзором PyForm из третьего издания книги. Исходный программный код PyForm был адаптирован для работы под управлением Python 3.X, однако в обзоре приводится программный код для 2.X из третьего издания. А теперь перейдем к следующей главе и к следующей теме, касающейся инструментов: реализации структур данных.
Использованная литература:
Марк Лутц — Программирование на Python, 4-е издание, II том, 2011