繁体   English   中英

如何在wxPython应用程序中使用Mac OS X NSEvents?

[英]How to use Mac OS X NSEvents within wxPython application?

我正在编写一个必须对Mac OS X上的系统级按键作出反应的应用程序。

因此,我发现了一些可以正常工作的关键记录器示例,因为当我的应用程序以wxPython编写时,所有示例均基于NSSharedApplication()和PyObjC AppHelper.runEventLoop()。

在这里,我发布了一个我认为应该可行的来自https://github.com/ljos的最简单示例的修改。 但事实并非如此。

from AppKit import *
import wx

class AppDelegate(NSObject):
    def applicationDidFinishLaunching_(self, aNotification):
        NSEvent.addGlobalMonitorForEventsMatchingMask_handler_(NSKeyDownMask, handler)

def handler(event):
    print (u"%@", event)

app = wx.App()
delegate = AppDelegate.alloc().init()
NSApp().setDelegate_(delegate)
app.MainLoop()

显然,MainLoop()不会捕获委托的NSEvents。

在app = wx.App()之后,正确返回了NSApp()。 那为什么不起作用呢? 我该如何运作?

没有人回答,我以不同的角度四处寻找。

因此,我发现Quartz模块可用于获取键盘和鼠标事件。 不需要自定义循环,因此wx.App()和wx.App.MainLoop()不会妨碍您。

我还找到了一个名为pynput的好程序包,它可以为我完成此任务,因此节省了很多时间。 Quartz非常复杂,函数和常量都有很多混乱的名称。 但这做得很好。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM