【发布时间】:2014-02-16 07:23:08
【问题描述】:
在 OSX Maverick 上,我有这个基于 PyObjC(python3.3) 的简单 APP
test.py
class MyDelegate(NSObject):
def applicationDidFinishLaunching_(self, sender):
NSEvent.addGlobalMonitorForEventsMatchingMask_handler_(NSKeyDownMask, lambda event: NSLog("hello"))
NSApp.activateIgnoringOtherApps_(YES)
delegate = MyDelegate.alloc().init()
app = NSApplication.sharedApplication()
app.setDelegate_(delegate)
menu = NSMenu.alloc().initWithTitle_("My Menu")
app.setMainMenu_(menu)
window = NSWindow.alloc().initWithContentRect_styleMask_backing_defer_(
NSMakeRect(0, 0, 100, 100),
NSTitledWindowMask,
NSBackingStoreBuffered,
NO
)
window.setTitle_("my app")
window.makeKeyAndOrderFront_(None)
windowController = NSWindowController.alloc().initWithWindow_(window)
AppHelper.runEventLoop()
运行它
python3 test.py
并在系统偏好设置 -> 隐私和安全 -> 可访问性中授予对终端的可访问性访问
我可以看到全局监视器工作正常。
然后我用 cx_Freeze 冻结它
python3 setup.py bdist_mac
以
结束build/Test.app
与
open build/Test.app
我在 OSX 系统日志中看到错误
universalAccessAuthWarn[546]: AccessibilityAPI: pid 3809, is not allowed to access the accessibility API. Path: /path/to/build/Test.app/Contents/MacOS/test
我在“系统偏好设置”->“隐私和安全”->“辅助功能”中启用了“测试”的访问权限,但这不起作用。
我在这里缺少什么?
更新: 可能是 cx_Freeze 的问题,使用 py2app(0.8) 使全局事件监视器工作。感谢 Ronald Oussoren 的提示(请参阅下面的答案和评论)。
【问题讨论】:
标签: python cocoa cx-freeze pyobjc