首页
学习
活动
专区
工具
TVP
发布
精选内容/技术社群/优惠产品,尽在小程序
立即前往

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 被击中。您有责任重新绘制切换按钮等。

扫码关注腾讯云开发者

领取腾讯云代金券

http://www.vxiaotou.com