【发布时间】:2013-07-24 15:06:21
【问题描述】:
我正在编写一个简单的 Mac 应用程序,旨在在用户单击鼠标按钮时在后台运行并执行某些操作。该应用程序是使用 PyObjC 用 Python 编写的。我正在使用addGlobalMonitorForEventsMatchingMask 来监视NSLeftMouseDown 事件:
NSEvent.addGlobalMonitorForEventsMatchingMask_handler_(NSLeftMouseDownMask, handler)
此代码在终端中运行时完美运行。但是,当我将它捆绑为独立应用程序(使用 py2app)然后启动它时,该应用程序一开始不会收到任何事件。 (或者至少,如果确实如此,它不会运行我的处理程序方法中的代码。)只有当我在 Dock 中单击应用程序时,它才会开始接收事件,之后,即使在它之后它也会继续接收事件返回后台。但它在激活一次之前不会收到任何东西。
我的问题是:如何让我的应用在启动后立即开始接收事件,而不必先通过单击 Dock 图标来激活它?这是NSEvents 的一些已知怪癖,还是我在 PyObjC 中的运行循环有问题?
非常感谢任何帮助或指导!
编辑:经过进一步测试,事实上,无论我是否激活它,我的应用程序似乎都会在启动后大约十秒内自发地开始接收通知。这有点烦人,但很好。
但是,如果我在 Info.plist 中使用 LSUIElement = true 或 LSBackgroundOnly = true 运行该应用程序(我最终想要这样做,因为该应用程序只能在后台运行,而不会出现在 Dock 中),我永远不会收到通知。所以我还是卡住了。
【问题讨论】:
-
您确定应用启动时执行此行吗?
-
您能发一个minimal, complete, valid example 以供其他人用来重现和调试问题吗?
-
检查它是否符合 AppStore 的指南。但如果是供个人使用,请尝试使用 Xcode。想要一个例子吗?
-
"请注意,不会为发送到您自己的应用程序的事件调用您的处理程序。" - 只是检查一下,这不是你的情况吗? IE。您尝试在应用程序处于活动状态时检查鼠标事件?
-
你的 OSX 版本是多少?
标签: python macos cocoa appkit pyobjc