Как и в случае с классом GuiMixin, если запустить пример 10.3 как самостоятельный сценарий, будет выполнена логика самотестирования, находящаяся в конце файла. На рис. 10.2 изображены получаемые при этом окна. На экране создаются три окна, представляющие классы TestApp. Все три окна имеют меню и панель инструментов, параметры которых определены в структурах данных шаблонов, создаваемых программным кодом самотестирования: раскрывающиеся меню File и Edit,
Рис. 10.2. Программный код самотестирования GuiMaker в действии
а также кнопка панели инструментов Quit и стандартная кнопка меню Help. На рисунке меню File одного из окон оторвано, а меню Edit другого окна раскрыто. Нижнее окно растянуто для наглядности.
Класс GuiMaker можно смешивать с другими суперклассами, но в первую очередь он предназначен служить тем же целям расширения и встраивания, что и класс Frame из библиотеки tkinter (особенно если учесть, что в действительности он является специализированным классом Frame, реализующим дополнительные протоколы конструирования). Фактически программный код самотестирования объединяет фрейм GuiMaker с инструментами из класса GuiMixin, представленного в предыдущем разделе.
Связи между суперклассами устанавливаются в программном коде так, что два из трех окон получают обработчик help из класса GuiMix— in, а TestAppWindowMenuBasic получает его из класса GuiMaker. Обратите внимание, что порядок, в котором смешиваются эти два класса, имеет большое значение: так как метод quit определен в обоих классах, Gui— Mixin и Frame, класс, от которого мы хотим его получить, нужно указать первым в строке заголовка смешанного класса, поскольку при множественном наследовании поиск производится слева направо. Чтобы обеспечить преимущество методов класса GuiMixin, его следует указывать перед суперклассом, производным от виджетов.
Более практическое применение класс GuiMaker найдет в таких примерах, как PyEdit в главе 11. В следующем разделе демонстрируется другой способ использования шаблонов класса GuiMaker для построения усложненного интерфейса, который служит еще одной проверкой его функциональных возможностей.
Использованная литература:
Марк Лутц — Программирование на Python, 4-е издание, I том, 2011