我正在编写一个应用程序,必须对Mac OS X上的系统范围的按键做出反应。
所以我找到了一些应该起作用的关键记录器示例,因为所有示例都基于NSSharedApplication()和PyObjC AppHelper.runEventLoop()而我的应用程序是用wxPython编写的。
在这里,我发布了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()。那么为什么这不起作用呢?我如何使它工作?
答案 0 :(得分:0)
由于没有人回答我在视野中以不同角度搜寻。
所以我发现Quartz模块可用于获取键盘和鼠标事件。不需要自定义循环,因此wx.App()和wx.App.MainLoop()不会妨碍。
我还找到了一个名为pynput的漂亮包,它为我做了这样的事情,从而节省了我很多时间。 Quartz非常复杂,很多函数和常量都是乱码。但它做得很好。