Python 使用PyObjC获取全局滚动事件

Python 使用PyObjC获取全局滚动事件,python,macos,pyobjc,Python,Macos,Pyobjc,如何使用PyObjC获取全局滚动事件?可以通过NSEvent呼叫完成吗 示例代码将非常棒…您使用NSEvent的方法是正确的!只要您不想修改事件,只需观察它,就可以轻松地调用。每当指定类型的事件发布到另一个应用程序时,您的应用程序将通过回调得到通知。*handler参数是一个块,但不必担心,因为在PyObjC中处理块参数几乎比在straight Obj-C中更容易:您可以传递任何可调用的对象(函数、方法、类等)剩下的由桥来处理。这就是您需要做的全部工作: def callback(event):

如何使用PyObjC获取全局滚动事件?可以通过NSEvent呼叫完成吗


示例代码将非常棒…

您使用
NSEvent
的方法是正确的!只要您不想修改事件,只需观察它,就可以轻松地调用。每当指定类型的事件发布到另一个应用程序时,您的应用程序将通过回调得到通知。*handler参数是一个块,但不必担心,因为在PyObjC中处理块参数几乎比在straight Obj-C中更容易:您可以传递任何可调用的对象(函数、方法、类等)剩下的由桥来处理。这就是您需要做的全部工作:

def callback(event):
    NSLog(u"%s" % event)

NSEvent.addGlobalMonitorForEventsMatchingMask_handler_(NSScrollWheelMask, callback)
在回调中,您将获得一个实际事件的副本,您可以查询该事件或任何您喜欢的内容

请注意,与AppKit中其他许多有趣的方法一样,这个方法在10.6中是新的,并且不在PyObjC旧版本(阅读:Apple提供)的元数据文件中。这意味着,如果您尝试使用网桥的默认安装来构建应用程序,它将失败。你必须使用更新的版本



*如果要将事件发布到应用程序中,必须使用。不幸的是,一个事件监视器无法同时获取您的应用程序和其他应用程序的事件。

您使用
NSEvent
的方法是正确的!只要您不想修改事件,只需观察它,就可以轻松地调用。每当指定类型的事件发布到另一个应用程序时,您的应用程序将通过回调得到通知。*handler参数是一个块,但不必担心,因为在PyObjC中处理块参数几乎比在straight Obj-C中更容易:您可以传递任何可调用的对象(函数、方法、类等)剩下的由桥来处理。这就是您需要做的全部工作:

def callback(event):
    NSLog(u"%s" % event)

NSEvent.addGlobalMonitorForEventsMatchingMask_handler_(NSScrollWheelMask, callback)
在回调中,您将获得一个实际事件的副本,您可以查询该事件或任何您喜欢的内容

请注意,与AppKit中其他许多有趣的方法一样,这个方法在10.6中是新的,并且不在PyObjC旧版本(阅读:Apple提供)的元数据文件中。这意味着,如果您尝试使用网桥的默认安装来构建应用程序,它将失败。你必须使用更新的版本



*如果要将事件发布到应用程序中,必须使用。不幸的是,一个事件监视器无法同时获取应用程序和其他应用程序的事件。

您能否详细说明“全局滚动事件”的含义?您想知道任意滚动视图何时移动吗?(顺便说一句,你有没有让这些事件点击工作过?我希望如此。)我想知道用户何时在触摸板上使用两个手指滚动。我不在乎是否有任何东西在滚动,我只需要知道用户何时滚动以及滚动多少。我没有让我的活动水龙头工作。。。(我有点放弃了一段时间,直到我真的需要让它工作。也许在那之前我会学习C…)无论哪个应用程序处于活动状态,都能获得滚动事件?这可能也需要一个事件点击。。。我最近一直在胡闹。这个周末我会再探讨一下,看看我是否能在你或其他人之前弄明白。你能详细解释一下你所说的“全球滚动事件”是什么意思吗?您想知道任意滚动视图何时移动吗?(顺便说一句,你有没有让这些事件点击工作过?我希望如此。)我想知道用户何时在触摸板上使用两个手指滚动。我不在乎是否有任何东西在滚动,我只需要知道用户何时滚动以及滚动多少。我没有让我的活动水龙头工作。。。(我有点放弃了一段时间,直到我真的需要让它工作。也许在那之前我会学习C…)无论哪个应用程序处于活动状态,都能获得滚动事件?这可能也需要一个事件点击。。。我最近一直在胡闹。这个周末我会再戳一次,看看我是否能在你或其他人之前弄清楚。好吧,这似乎应该行得通,但当我使用代码时,它似乎一开始就完成了,而且从不调用回调函数。有没有我必须启动的PyObjC运行循环或其他什么。如果这是一个愚蠢的问题,请原谅……是的,对不起,这不是一个完整的脚本。您必须将其放入GUI应用程序或启动自己的跑步循环。我似乎记得你在之前的一个问题中提到过这个部分,对吗?我是PyObjC的新手,你能详细说明我将如何开始运行循环吗?在我之前的问题中,我并不完全明白我在做什么你在用Xcode吗?这就是我一直使用PyObjC的方式。如果使用模板创建Cocoa Python应用程序,则可以将此代码粘贴到应用程序代理的awakeFromNib方法中。我认为这是最无痛的方法。恐怕PyObjC大约是2/3 ObjC。如果不了解Cocoa框架,就很难使用它,这意味着需要了解一些Objective-C。手动创建运行循环……我不确定。我试着看一看,很有效!我试过Xcode,一切都正常,但有一件事我不明白,NSLog是干什么的?这只是为了看看它是否有效还是有实际用途。好吧,这似乎应该有效,但当我使用代码时,它似乎一开始就完成了,而且从不调用回调函数。有没有我必须启动的PyObjC运行循环或其他什么。如果这是一个愚蠢的问题,请原谅……是的,对不起,这不是一个完整的脚本。您必须将其放入GUI应用程序或启动自己的跑步循环。我似乎记得你在之前的一个问题中提到过这个部分,对吗?我是PyObjC的新手,你能详细说明我将如何开始运行循环吗?在我之前的问题中,我并不完全明白我在做什么你在用Xcode吗?这就是我一直使用PyObjC的方式。如果使用模板创建Cocoa Python应用程序,则可以将此代码粘贴到应用程序代理的awakeFromNib方法中。我认为这是最无痛的方法。PyObjC约为2/