Протоколы подклассов

protokoly podklassov Приемы программирования графических интерфейсов

Помимо структур меню и панелей инструментов клиенты этого класса могут вмешиваться и изменять реализованные в нем методы и протоколы компоновки:

Атрибуты шаблона

Предполагается, что клиенты этого класса установят атрибуты menuBar и toolBar в каком-то месте в цепочке наследования до момента завершения метода start.

Инициализация

Метод start может переопределяться для динамического создания шаблонов меню и панели инструментов, поскольку ему доступна ссылка self. Метод start служит также местом, где осуществляется общая инициализация — конструктор __init__ класса GuiMixin должен вызываться, но не переопределяться.

Добавление виджетов

Метод makeWidgets может быть переопределен и создает виджеты в средней части окна — между полосой меню и панелью инструментов. По умолчанию makeWidgets помещает в середине метку с именем ближайшего класса, но по сути это абстрактный метод и предполагается его специализация в подклассах.

Протокол компоновки методом pack

В специализированном методе makeWidgets клиенты могут прикреплять виджеты средней части к любому краю self (Frame), так как полоса меню и панель инструментов уже захватили верх и низ контейнера к моменту выполнения makeWidgets. Если виджеты, составляющие среднюю часть, компонуются с помощью метода pack, она не обязательно должна быть вложенным фреймом. Полоса меню и панель инструментов автоматически компонуются первыми, чтобы при сжатии окна они обрезались в последнюю очередь.

Протокол компоновки методом grid

Размещение виджетов в средней части может осуществляться по сетке, если эта сетка помещена во вложенный фрейм, который добавляется в родительский контейнер self. (Напомню, что на каждом уровне контейнеров можно применять любой из методов, grid или pack, но не оба вместе, а self является фреймом, в котором к моменту вызова makeWidgets меню и панель инструментов уже скомпонованы с применением метода pack.) Так как фрейм GuiMaker сам компонует себя в родительском контейнере с помощью метода pack, по аналогичным причинам его нельзя непосредственно встраивать в контейнер с элементами, располагаемыми по сетке, — для использования его в таком контексте добавьте промежуточный фрейм с сеткой.

Использованная литература:
Марк Лутц — Программирование на Python, 4-е издание, I том, 2011

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