FrameWork
FrameWork - 交互式应用程序框架
该FrameWork
模块包含一起为交互式Macintosh应用程序提供框架的类。程序员通过创建覆盖基类的各种方法的子类来构建应用程序,从而实现所需的功能。覆盖功能通常可以在各种不同的层次上完成,即以非标准方式处理单个对话框窗口中的点击,不需要覆盖整个事件处理。
注意
此模块已在Python 3.x中删除。
在FrameWork上工作几乎停止了,现在PyObjC可用于Python的完整Cocoa访问,文档只描述最重要的功能,而不是以最合乎逻辑的方式。 检查来源或例子的更多细节。 以下是MacPython新闻组发布的关于FrameWork的优势和局限性的一些评论:
FrameWork的优点是它可以让你在很多不同的地方进入控制流程。 例如,W使用不同的方式来启用/禁用菜单,并且插入正确的部分以保持其余的完整。 FrameWork的弱点在于它没有抽象的命令接口(但这应该不难),它的对话支持是最小的,并且它的控制/工具栏支持是不存在的。
该FrameWork
模块定义了以下功能:
FrameWork.Application()
代表完整应用程序的对象。请参阅下面的方法说明。默认__init__()
例程创建一个空的窗口词典和一个带有苹果菜单的菜单栏。
FrameWork.MenuBar()
表示菜单栏的对象。这个对象通常不是由用户创建的。
FrameWork.Menu(bar, title[, after])
代表菜单的对象。在创建您通过MenuBar
在菜单中出现的标题
字符串和位置(从1开始)后,
应该在哪里出现在菜单(默认:年底)。
FrameWork.MenuItem(menu, title[, shortcut, callback])
创建一个菜单项目对象。参数是要创建的菜单,项目标题字符串以及可选的键盘快捷键和回调例程。使用参数menu-id,菜单中的项目编号(基于1),当前前窗和事件记录来调用回调。
回调也可以是一个字符串,而不是可调用对象。在这种情况下,菜单选择会导致在最上面的窗口和应用程序中查找方法。方法名称是带'domenu_'
前置的回调字符串。
调用该MenuBar
fixmenudimstate()
方法可以根据当前前窗设置所有菜单项的正确调光。
FrameWork.Separator(menu)
在菜单的末尾添加一个分隔符。
FrameWork.SubMenu(menu, label)
在菜单
菜单
下创建一个名为label
的子菜单
。菜单
对象被返回。
FrameWork.Window(parent)
创建(无模式)窗口。Parent
是窗口所属的应用程序对象。该窗口在稍后才显示。
FrameWork.DialogWindow(parent)
创建一个无模式的对话窗口。
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
是你想要留给其他并发应用程序的滴答的数量(默认为0,这可能不是一个好主意)。虽然提升自我
以退出主循环仍然受到支持,但不建议:请拨打电话self._quit()
。
事件循环分成许多小部分,每个部分都可以被覆盖。默认方法负责将事件分派到窗口和对话框,处理拖动和调整大小,Apple事件,非FrameWork窗口的事件等。
通常,如果事件已完全处理,则所有事件处理程序应返回1,否则返回0(例如,因为前窗不是FrameWork窗口)。 这是必需的,以便更新事件等可以传递到其他窗口,如Sioux控制台窗口。 在our_dispatch或其调用者中不允许调用MacOS.HandleEvent(),因为如果通过Python内部循环事件处理程序调用代码,则可能导致无限循环。
Application.asyncevents(onoff)
使用非零参数调用此方法以启用异步事件处理。这将告诉内部解释器循环在事件可用时调用应用程序事件处理程序async_dispatch
。这将导致FrameWork窗口更新和用户界面在长时间计算期间保持工作状态,但会降低解释器的速度,并可能导致非重入代码(如FrameWork本身)出现令人惊讶的结果。默认情况下,async_dispatch
将立即调用our_dispatch,
但您可以重写此参数以仅异步处理某些事件。你不处理的事件将被传递给Sioux等。
旧的开/关值被返回。
Application._quit()
在下一个方便的时刻终止正在运行的mainloop()调用。
Application.do_char(c, event)
用户输入字符c
。事件
的完整细节可以在事件
结构中找到。此方法也可以在Window
对象中提供,如果窗口位于最前面,则该对象将覆盖应用程序范围的处理程序。
Application.do_dialogevent(event)
在事件循环中早期调用以处理无模式对话事件。默认方法只是将事件分派到相关对话框(而不是通过DialogWindow
涉及的对象)。如果需要特殊处理对话事件(键盘快捷键等),则覆盖。
Application.idle(event)
当没有事件可用时,由主事件循环调用。传递null事件(所以你可以看看鼠标的位置等)。
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)
部分P码
控制
的控制
被用户打。跟踪等已经被照顾。
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)
由用户提供并在用户交互后调用。 这将是'x'或'y',什么是' - ',' - ','set','++'或'+'。 对于“设置”,值将包含新的滚动条位置。
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对象
除了那些Window
对象之外,DialogWindow
对象还具有以下方法:
DialogWindow.open(resid)
创建对话窗口,与ID的DLOG资源渣油
。对话框对象存储在中self.wid
。
DialogWindow.do_itemhit(item, event)
项目编号item
被击中。您有责任重新绘制切换按钮等。