gpt4 book ai didi

python - 在 Mac OS X 上的 wxPython 中接受鼠标滚动手势

转载 作者:行者123 更新时间:2023-11-30 23:34:26 27 4
gpt4 key购买 nike

在 Mac OS X 上,触控板支持多种手势,其中之一是用两根手指滑动以在页面上向上、向下、向左或向右滚动。 wxPython 有一个面板可以帮助创建滚动小部件wx.lib.scrolledpanel。然而它不支持手势,这是一个真正的痛苦。

我尝试修改 NSView,就像它是一个普通的 Objective C 应用程序一样,但是 NSEvents 使用方法(touchesBeganWithEvent: 等),这些方法被子类化以用作事件的通知和处理。这与 wxPython 中的 Bind 调用不同。不过,如果 Objective C 允许猴子修补的话,那就没问题了……例如

def handleTouchBegin(event):
print "Hey a touch event has begun!"

view.touchBeganWithEvent_ = handleTouchBegin

但是你可以猜到 PyObj C 错误(因为 Objective C 不支持猴子修补或不支持任何干净漂亮的方式),并且我收到以下错误

TypeError: cannot change a method

好吧,我可以按照苹果所说的那样对其进行子类化,但是该对象已经创建了,所以我如何仍然捕获事件。当然还有

NSEvent addGlobalMonitorForEventsMatchingMask: 
and
NSEvent addLocalMonitorForEventsMatchingMask:

但这些也令人失望,因为它们要么不处理应用程序(全局处理所有其他应用程序),要么不处理单个 NSView 的事件(或者确实处理但我被误导了)。

那么我应该怎么做呢?我是否错过了另一个选项,我知道我读过一些有关 NSResponder 的内容,但从我收集的信息来看,这就是 NSView 是什么,一个事件响应程序,并且您不会向 NSView 添加一个事件响应程序。

是否有像 QTKit 中那样的观察者,例如用于监视负载状态变化( https://developer.apple.com/library/mac/documentation/Cocoa/Conceptual/QTKitApplicationProgrammingGuide/AnatomyoftheQTKFramework/AnatomyoftheQTKFramework.html#//apple_ref/doc/uid/TP40008156-CH109-SW11 )?

最佳答案

ObjC 不支持 Python 风格的 Monkeypatching...但它确实支持一些类似的功能,例如方法调配、类构成、类别插入等。PyObjC 可以完成所有这些事情。

在我的脑海中,来自 PyObjC 的 swizzling 应该看起来像这样:

def swizzle(cls, sel, func):
oldimp = cls.instanceMethodForSelector_(sel)
def wrapper(self, *args, **kwargs):
return func(self, oldimp, *args, **kwargs)
newmethod = objc.selector(wrapper,
selector=oldimp.selector, signature=oldimp.signature)
objc.classAddMethod(cls, sel, newmethod)
return wrapper

关于python - 在 Mac OS X 上的 wxPython 中接受鼠标滚动手势,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/18138651/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com