On this page
37.6. FrameWork —交互式应用程序框架
FrameWork模块包含的类共同为交互式 Macintosh 应用程序提供框架。程序员pass创建覆盖 Base Class 的各种方法的子类来构建应用程序,从而实现所需的Function。覆盖Function通常可以在各种不同级别上完成,即,以非标准方式处理单个对话框窗口中的单击,则不必覆盖完整的事件处理。
Note
该模块已在 Python 3.x 中删除。
FrameWork的工作已经停止了,现在PyObjC
可用于从 Python 进行完整的 Cocoa 访问,并且文档仅描述了最重要的Function,而没有以最合乎逻辑的方式描述。检查源或示例以获取更多详细信息。以下是在 MacPython 新闻组上发布的有关FrameWork的优点和局限性的一些 Comment:
Note
FrameWork模块定义以下Function:
FrameWork.
Application
( )- 代表完整应用程序的对象。请参阅下面的方法说明。默认的init()例程创建一个空的窗口字典和一个带有 Apple 菜单的菜单栏。
FrameWork.
MenuBar
( )- 代表菜单栏的对象。该对象通常不是用户创建的。
FrameWork.
Menu
(* bar , title * [,* after *])- 代表菜单的对象。创建后,您传递
MenuBar
菜单出现在菜单中,* title 字符串和菜单应出现的位置(从 1 开始)在 after *之后(默认值:末尾)。
- 代表菜单的对象。创建后,您传递
FrameWork.
MenuItem
(菜单,标题 [,快捷方式,回叫])- 创建一个菜单项对象。参数是要创建的菜单,项目标题字符串以及(可选)键盘快捷键和回调例程。使用参数 menu-id,菜单中的项目号(基于 1),当前前窗口和事件记录调用回调。
除了可调用对象之外,回调还可以是字符串。在这种情况下,菜单选择会导致在最上方的窗口和应用程序中查找方法。方法名称是带有'domenu_'
的回调字符串。
调用MenuBar
fixmenudimstate()
方法可基于当前的前窗口为所有菜单项设置正确的调光。
FrameWork.
Separator
(菜单)- 在菜单末尾添加分隔符。
FrameWork.
SubMenu
(菜单,标签)- 在菜单* menu 下创建一个名为 label *的子菜单。返回菜单对象。
FrameWork.
Window
(* parent *)- 创建一个(无模式)窗口。 * Parent *是窗口所属的应用程序对象。该窗口直到稍后才显示。
FrameWork.
DialogWindow
(* parent *)- 创建一个无模式的对话框窗口。
FrameWork.
windowbounds
(宽度,高度)- 返回一个适合创建给定宽度和高度的窗口的
(left, top, right, bottom)
Tuples。该窗口将相对于以前的窗口错开,并try将整个窗口保持在屏幕上。但是,窗口将始终是给定的确切大小,因此部件可能不在屏幕上。
- 返回一个适合创建给定宽度和高度的窗口的
FrameWork.
setwatchcursor
( )- 将鼠标光标设置在手表上。
FrameWork.
setarrowcursor
( )- 将鼠标光标设置为箭头。
37.6.1. 应用对象
应用程序对象具有以下方法,其中包括:
Application.
getabouttext
( )- 重写此方法可返回描述您的应用程序的文本字符串。或者,重写
do_about()
方法以获得更详细的“关于”消息。
- 重写此方法可返回描述您的应用程序的文本字符串。或者,重写
Application.
mainloop
([掩码 [,await]])- 该例程是主事件循环,调用它可以设置应用程序滚动。 * Mask 是要处理的事件的掩码, wait 是要留给其他并发应用程序的滴答数(默认为 0,这可能不是一个好主意)。虽然仍然支持 self *退出主循环,但不建议这样做:而是调用
self._quit()
。
- 该例程是主事件循环,调用它可以设置应用程序滚动。 * Mask 是要处理的事件的掩码, wait 是要留给其他并发应用程序的滴答数(默认为 0,这可能不是一个好主意)。虽然仍然支持 self *退出主循环,但不建议这样做:而是调用
事件循环分为许多小部分,每个小部分都可以覆盖。默认方法负责将事件调度到窗口和对话框,处理拖动和调整大小,Apple 事件,非 FrameWork 窗口的事件等。
通常,如果事件已完全处理,则所有事件处理程序都应返回1
,否则应返回0
(例如,因为前窗口不是 FrameWork 窗口)。这是必需的,以便可以将更新事件等传递到其他窗口,例如 Sioux 控制台窗口。 * our_dispatch *或其被调用者内部不允许调用MacOS.HandleEvent()
,因为如果pass Python 内部循环事件处理程序调用代码,则可能导致无限循环。
Application.
asyncevents
(* onoff *)- 使用非零参数调用此方法以启用异步事件处理。这将告诉内部解释器循环在事件可用时调用应用程序事件处理程序* async_dispatch 。这将导致 FrameWork 窗口更新和用户界面在长时间的计算过程中保持正常工作,但会使解释器变慢,并且可能在不可重入的代码(例如 FrameWork 本身)中导致令人惊讶的结果。默认情况下, async_dispatch 将立即调用 our_dispatch *,但您可以重写此方法以仅异步处理某些事件。您不处理的事件将传递给 Sioux 等。
返回旧的开/关值。
Application.
_quit
( )- 在下一个方便的 Moment 终止正在运行的mainloop()通话。
Application.
do_char
(* c , event *)- 用户键入字符* c 。该事件的完整详细信息可以在 event *结构中找到。也可以在
Window
对象中提供此方法,如果窗口位于最前面,该对象将覆盖应用程序范围的处理程序。
- 用户键入字符* c 。该事件的完整详细信息可以在 event *结构中找到。也可以在
Application.
do_dialogevent
(* event *)- 在事件循环的早期调用,以处理无模式对话框事件。默认方法只是将事件调度到相关对话框(而不是pass所涉及的
DialogWindow
对象)。如果需要特殊处理对话框事件(键盘快捷键等),则覆盖。
- 在事件循环的早期调用,以处理无模式对话框事件。默认方法只是将事件调度到相关对话框(而不是pass所涉及的
Application.
idle
(* event *)- 没有可用事件时,由主事件循环调用。传递了空事件(因此您可以查看鼠标的位置,等等)。
37.6.2. 窗口对象
窗口对象具有以下方法,其中包括:
Window.
open
( )- 重写此方法可打开一个窗口。将 Mac OS 的 window-id 存储在
self.wid
中,并调用do_postopen()
方法向父应用程序注册该窗口。
- 重写此方法可打开一个窗口。将 Mac OS 的 window-id 存储在
Window.
close
( )- 重写此方法可对窗口关闭进行任何特殊处理。调用
do_postclose()
方法来清除父状态。
- 重写此方法可对窗口关闭进行任何特殊处理。调用
Window.
do_postresize
(宽度,高度,* macoswindowid *)- 调整窗口大小后调用。如果需要比调用
InvalRect
做更多的事情,则覆盖。
- 调整窗口大小后调用。如果需要比调用
Window.
do_contentclick
(* local , modifiers , event *)- 用户单击窗口的内容部分。参数是坐标(相对于窗口),键修饰符和原始事件。
Window.
do_update
(* macoswindowid , event *)- 收到窗口的更新事件。重新绘制窗口。
Window.
do_activate
(* activate , event *)- 该窗口已激活(
activate == 1
)或已禁用(activate == 0
)。处理诸如突出显示焦点等内容。
- 该窗口已激活(
37.6.3. ControlsWindow 对象
除了Window
对象,ControlsWindow 对象还具有以下方法:
ControlsWindow.
do_controlhit
(窗口,控制,* pcode *,事件)- 控件* control 的部分 pcode *被用户点击。跟踪等已经得到了解决。
37.6.4. ScrolledWindow 对象
ScrolledWindow 对象是具有以下额外方法的 ControlsWindow 对象:
ScrolledWindow.
scrollbars
([* wantx * [,* wanty *]])- 创建(或销毁)水平和垂直滚动条。参数指定您想要的参数(默认值:全部)。滚动条始终具有最小
0
和最大32767
。
- 创建(或销毁)水平和垂直滚动条。参数指定您想要的参数(默认值:全部)。滚动条始终具有最小
ScrolledWindow.
getscrollbarvalues
( )- 您必须提供此方法。它应该返回一个 Tuples
(x, y)
,以给出滚动条的当前位置(在0
和32767
之间)。您可以返回None
来表示整个文档在该方向上都可见。
- 您必须提供此方法。它应该返回一个 Tuples
ScrolledWindow.
updatescrollbars
( )- 文档更改后调用此方法。它将调用getscrollbarvalues()并更新滚动条。
ScrolledWindow.
scrollbar_callback
(* which , what , value *)- 由您提供,并在用户交互后调用。 哪个将是
'x'
或'y'
,什么将是'-'
,'--'
,'set'
,'++'
或'+'
。对于'set'
,* value *将包含新的滚动条位置。
- 由您提供,并在用户交互后调用。 哪个将是
ScrolledWindow.
scalebarvalues
(* absmin , absmax , curmin , curmax *)- 辅助方法,可帮助您计算要从getscrollbarvalues()返回的值。您传递文档的最小值和最大值以及最上面(最左边)和最下面(最右边)的可见值,它返回正确的数字或
None
。
- 辅助方法,可帮助您计算要从getscrollbarvalues()返回的值。您传递文档的最小值和最大值以及最上面(最左边)和最下面(最右边)的可见值,它返回正确的数字或
ScrolledWindow.
do_activate
(* onoff , event *)- 当窗口成为最前面时,照顾滚动条的变暗/突出显示。如果覆盖此方法,请在方法末尾调用此方法。
ScrolledWindow.
do_postresize
(宽度,高度,窗口)- 将滚动条移动到正确的位置。如果您覆盖它,请首先调用此方法。
ScrolledWindow.
do_controlhit
(窗口,控制,* pcode *,事件)- 处理滚动条交互。如果覆盖它,则首先调用此方法,返回值非零,表示该命中在滚动条中并且已经处理。
37.6.5. DialogWindow 对象
除了Window
对象,DialogWindow 对象还具有以下方法:
DialogWindow.
open
(* resid *)- 从 ID 为* resid *的 DLOG 资源创建对话框窗口。对话框对象存储在
self.wid
中。
- 从 ID 为* resid *的 DLOG 资源创建对话框窗口。对话框对象存储在
DialogWindow.
do_itemhit
(* item , event *)- 项目编号* item *被点击。您负责重新绘制切换按钮等。