Spec-Zone.ru › Python 2.7

FrameWork — Интерактивная платформа для приложений

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

Примечание

Этот модуль был удален в Python 3.x.

Работа над FrameWork практически прекращена, теперь, когда PyObjC доступен для полного доступа к Cocoa из Python, и документация описывает только самую важную функциональность, и при этом не самым логичным образом. Для получения более подробной информации, изучите исходный код или примеры. Ниже приведены некоторые комментарии, опубликованные на новостной группе MacPython, касательно сильных и слабых сторон FrameWork:

Сильная сторона FrameWork заключается в том, что она позволяет вмешиваться в поток управления в различных точках. W, например, использует другой способ включения/выключения меню, который подключается прямо, оставляя остальную часть неизменной. Слабые стороны FrameWork заключаются в отсутствии абстрактного интерфейса команд (хотя это не должно быть сложно), минимальной поддержке диалогов и полном отсутствии поддержки элементов управления/панелей инструментов.

Модуль FrameWork определяет следующие функции:

FrameWork.Application()

Объект, представляющий собой полное приложение. Смотрите ниже описание методов. Стандартный метод __init__() создает пустой словарь окна и строку меню с меню «Apple».

FrameWork.MenuBar()

Объект, представляющий собой строку меню. Этот объект обычно не создается пользователем.

FrameWork.Menu(bar, title[, after])

Объект, представляющий собой меню. При создании вы передаете MenuBar меню появляется, строку title и позицию (1-основанную) после того, где должно появиться меню (по умолчанию: в конце).

FrameWork.MenuItem(menu, title[, shortcut, callback])

Создает объект элемента меню. Аргументы — меню для создания, строка названия элемента и, необязательно, сочетание клавиш и обратный вызов. Обратный вызов вызывается с аргументами идентификатор меню, номер элемента в меню (1-основанный), текущее активное окно и запись события.

Вместо вызываемого объекта обратный вызов также может быть строкой. В этом случае выбор меню вызывает поиск метода в верхнем окне и в приложении. Название метода — строка обратного вызова со строкой 'domenu_' в начале.

Вызов метода MenuBar fixmenudimstate() устанавливает правильную степень затемнения для всех элементов меню, основываясь на текущем активном окне.

FrameWork.Separator(menu)

Добавляет разделитель в конец меню.

FrameWork.SubMenu(menu, label)

Создает подменю с именем label под меню menu. Возвращается объект меню.

FrameWork.Window(parent)

Создает (бесmodalное) окно. Parent — объект приложения, к которому принадлежит окно. Окно не отображается до его последующего отображения.

FrameWork.DialogWindow(parent)

Создает бесmodalное окно диалога.

FrameWork.windowbounds(width, height)

Возвращает кортеж (left, top, right, bottom) размера окна заданной ширины и высоты. Окно будет смещено относительно предыдущих окон, и будет сделана попытка разместить всё окно на экране. Тем не менее, окно всегда будет иметь указанный размер, поэтому части могут быть вне экрана.

FrameWork.setwatchcursor()

Устанавливает курсор мыши в виде часов.

FrameWork.setarrowcursor()

Устанавливает курсор мыши в виде стрелки.

1. Объекты приложений

Объекты приложений, среди прочего, имеют следующие методы:

Application.makeusermenus()

Переопределите этот метод, если вам нужны меню в вашем приложении. Добавьте меню в атрибут menubar.

Application.getabouttext()

Переопределите этот метод, чтобы вернуть строку текста, описывающую ваше приложение. Также можно переопределить метод do_about() для более сложных сообщений «О программе».

Application.mainloop([mask[, wait]])

Этот метод — основной цикл обработки событий, вызовите его, чтобы запустить ваше приложение. Mask — маска событий, которые вы хотите обрабатывать, wait — количество тиков, которые вы хотите оставить другим concurrent приложениям (по умолчанию 0, что, вероятно, не лучший вариант). Хотя вызов self для выхода из цикла обработки событий всё ещё поддерживается, это не рекомендуется: вызовите self._quit() вместо этого.

Цикл обработки событий разделён на много маленьких частей, каждая из которых может быть переопределена. Стандартные методы отвечают за распределение событий окнам и диалогам, обработку перетаскиваний и изменений размеров, Apple Events, события для окон, не являющихся FrameWork, и т. д.

В общем случае, все обработчики событий должны возвращать 1 , если событие полностью обработано, и 0 в противном случае (например, если активное окно не является окном FrameWork). Это необходимо для того, чтобы события обновления и подобные могли быть переданы другим окнам, таким как консоль Sioux. Вызов MacOS.HandleEvent() не разрешён внутри our_dispatch или его вызывающих методах, так как это может привести к бесконечной петле, если код вызван через обработчик событий Python.

Application.asyncevents(onoff)

Вызовите этот метод с ненулевым параметром, чтобы включить асинхронную обработку событий. Это скажет внутреннему циклу интерпретатора вызвать обработчик событий приложения async_dispatch всякий раз, когда доступны события. Это позволит окнам FrameWork и пользовательскому интерфейсу оставаться работоспособными во время длительных вычислений, но замедлит интерпретатор и может вызвать неожиданные результаты в нерекурсивном коде (таком как FrameWork сам по себе). По умолчанию async_dispatch сразу же вызовет our_dispatch, но вы можете переопределить это, чтобы обрабатывать только определённые события асинхронно. События, которые вы не обрабатываете, будут переданы Sioux и подобным.

Возвращается старое значение включения/выключения.

Application._quit()

Прервать запущенный вызов mainloop() в ближайший удобный момент.

Application.do_char(c, event)

Пользователь ввёл символ c. Полные данные о событии можно найти в структуре event. Этот метод также может быть предоставлен в объекте Window , который переопределяет обработчик на уровне приложения, если окно является активным.

Application.do_dialogevent(event)

Вызывается в начале цикла обработки событий для обработки событий бесmodalных диалогов. Стандартный метод просто рассылает событие соответствующему диалогу (не через вовлечённый объект DialogWindow). Переопределите, если вам нужна специальная обработка событий диалогов (сочетания клавиш и т. п.).

Application.idle(event)

Вызывается основным циклом обработки событий, когда нет доступных событий. Передаётся событие «нет события» (чтобы вы могли просмотреть координаты мыши и т. д.).

2. Объекты окон

Объекты окон, помимо прочего, имеют следующие методы:

Window.open()

Переопределите этот метод для открытия окна. Сохраните идентификатор окна Mac OS в self.wid и вызовите метод do_postopen() , чтобы зарегистрировать окно в родительском приложении.

Window.close()

Переопределите этот метод для выполнения специальной обработки при закрытии окна. Вызовите метод do_postclose() для очистки состояния родителя.

Window.do_postresize(width, height, macoswindowid)

Вызывается после изменения размера окна. Переопределите, если нужно сделать больше, чем вызвать InvalRect.

Window.do_contentclick(local, modifiers, event)

Пользователь щелкнул в содержимом окна. Аргументы — координаты (относительно окна), модификаторы клавиш и исходное событие.

Window.do_update(macoswindowid, event)

Получено событие обновления для окна. Перерисуйте окно.

Window.do_activate(activate, event)

Окно активировано (activate == 1) или деактивировано (activate == 0). Обработайте такие вещи, как выделение фокуса и т. д.

3. Объект ControlsWindow

Объекты ControlsWindow, помимо методов объектов Window , имеют следующие методы:

ControlsWindow.do_controlhit(window, control, pcode, event)

Часть pcode управления control была нажата пользователем. Отслеживание и подобные действия уже выполнены.

4. Объект ScrolledWindow

Объекты ScrolledWindow являются объектами ControlsWindow с дополнительными методами:

ScrolledWindow.scrollbars([wantx[, wanty]])

Создать (или уничтожить) горизонтальные и вертикальные полосы прокрутки. Аргументы указывают, какие именно вы хотите (по умолчанию: обе). Полосы прокрутки всегда имеют минимальное значение 0 и максимальное значение 32767.

ScrolledWindow.getscrollbarvalues()

Вы должны предоставить этот метод. Он должен вернуть кортеж (x, y), содержащий текущее положение полос прокрутки (между 0 и 32767). Вы можете вернуть None для любого значения, чтобы указать, что весь документ виден в этом направлении.

ScrolledWindow.updatescrollbars()

Вызовите этот метод, когда документ изменился. Он вызовет getscrollbarvalues() и обновит полосы прокрутки.

ScrolledWindow.scrollbar_callback(which, what, value)

Предоставляется вами и вызывается после взаимодействия пользователя. which будет 'x' или 'y', what будет '-', '--', 'set', '++' или '+'. Для 'set', value будет содержать новое положение полосы прокрутки.

ScrolledWindow.scalebarvalues(absmin, absmax, curmin, curmax)

Вспомогательный метод, помогающий вам вычислить значения, которые следует вернуть из getscrollbarvalues(). Вы передаёте минимальное и максимальное значение документа, а также самые верхние (левые) и нижние (правые) видимые значения, и он возвращает правильное число или None.

ScrolledWindow.do_activate(onoff, event)

Обеспечивает затемнение/выделение полос прокрутки, когда окно становится активным. Если вы переопределяете этот метод, вызовите его в конце вашего метода.

ScrolledWindow.do_postresize(width, height, window)

Перемещает полосы прокрутки в правильное положение. Вызовите этот метод изначально, если вы переопределите его.

ScrolledWindow.do_controlhit(window, control, pcode, event)

Обрабатывает взаимодействие с полосами прокрутки. Если вы переопределяете его, сначала вызовите этот метод; ненулевое значение возвращаемого значения указывает, что щелчок был в полосах прокрутки и был обработан.

5. Объекты DialogWindow

Объекты DialogWindow имеют следующие методы помимо тех, что у объектов Window:

DialogWindow.open(resid)

Создать окно диалога из ресурса DLOG с идентификатором resid. Объект диалога хранится в self.wid.

DialogWindow.do_itemhit(item, event)

Был нажат элемент с номером item. Вы несете ответственность за перерисовку переключателей и т. д.

© 2001–2020 Python Software Foundation
Licensed under the PSF License.
https://docs.python.org/2.7/library/framework.html

Spec-Zone.ru

Настройки Оффлайн Что нового Помощь О нас
Spec-Zone .ru
спецификации, руководства, описания, API