Классы наборов утилит

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

Чтобы получить фактические наборы утилит, нужно спуститься на один уровень ниже. Модуль в примере 10.6 определяет подклассы двух специфических по типу классов, наследующих класс ShellGui, чтобы предоставить наборы доступных инструментов в виде списка и словаря (обычно достаточно одного из них, но модуль иллюстрирует применение обоих). Кроме того, именно этот модуль запускает графический интерфейс — модуль shellgui является всего лишь библиотекой классов.

Пример 10.6. PP4E\Gui\ShellGui\mytools.py

#!/usr/local/bin/python

############################################################################## реализует два набора инструментов, специфичных для типов

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

from shellgui import * # интерфейсы, специфичные для типов

from packdlg import runPackDialog # диалоги для ввода данных

from unpkdlg import runUnpackDialog # оба используют классы приложений

class TextPak1(ListMenuGui): def __init__(self):

self.myMenu = [(‘Pack ‘, runPackDialog), # простые функции (‘Unpack’, runUnpackDialog), # длина меток одинаковая (‘Mtool ‘, self.notdone)] # метод из GuiMixin

ListMenuGui.__init__(self) def forToolBar(self, label):

return label in {‘Pack ‘, ‘Unpack’} # синтаксис множеств в 3.x

class TextPak2(DictMenuGui): def __init__(self):

self.myMenu = {‘Pack ‘: runPackDialog, # или использовать input

‘Unpack’: runUnpackDialog, # вместо диалогов ввода

‘Mtool ‘: self.notdone}

DictMenuGui.__init__(self)

if __name__ == ‘__main__’: # реализация самопроверки

from sys import argv # ‘menugui.py list|~’

if len(argv) > 1 and argv[1] == ‘list’: print(‘list test’)

TextPak1().mainloop() else: print(‘dict test’)

TextPak2().mainloop()

Классы в этом модуле являются конкретными наборами утилит. Чтобы вывести другой набор имен утилит, нужно просто написать и использовать новый подкласс. Разделение логики приложения на такие отдельные подклассы и модули повышает возможность повторного использования программного обеспечения.

На рис. 10.5 изображено главное окно ShellGui, создаваемое при запуске сценария mytools с классом структуры меню на основе списка в Windows 7, а также оторванные меню, демонстрирующие свое содержание. Меню и панель инструментов этого окна построены с помощью класса GuiMaker, а кнопки Quit и Help и пункты меню, вызывающие методы quit и help, унаследованы из класса GuiMixin через суперклассы ShellGui модуля. Надеюсь, вы начинаете понимать, почему в этой книге столь часто проповедуется повторное использование программного кода?

Рис. 10.5. Элементы mytools в окне ShellGui

 

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

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