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

2024-06-09 16:15:43 发布

您现在位置:Python中文网/ 问答频道 /正文

在MacOSX上,触控板支持多种手势,一种是在页面上向上、向下、向左或向右滑动。wxPython有一个面板来帮助创建滚动小部件wx.lib.滚动面板. 然而,它不支持手势,这是一个真正的痛苦。在

我已经尝试过修改NSView,如果它是一个普通的Objective C应用程序的话,它是这样做的,但是NSEvents使用子类化的方法(touchesBeganWithEvent:,等等),这些方法被用作事件的通知和处理。这与wxPython中的绑定调用不同。不过,如果目标C允许猴子修补。。。例如

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

view.touchBeganWithEvent_ = handleTouchBegin

但是,正如您可以猜测pyobjc错误(因为objectivec不支持monkey补丁,或者不支持干净漂亮的方式),我得到以下错误

^{pr2}$

好吧,好吧,我可以做苹果说的,并子类化,但对象已经创建,所以我如何仍然捕捉事件。当然还有

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)?在


Tags: 方法event应用程序面板apple错误wxpython事件
1条回答
网友
1楼 · 发布于 2024-06-09 16:15:43

ObjC不支持Python风格的monkeypatching…但是它支持一些类似的特性,比如方法转换、类设置、类别插入等等,PyObjC可以做所有这些事情。在

从我的头顶上看,从PyObjC发出的嗖嗖声应该是这样的:

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

相关问题 更多 >