我正在编写一个python应用程序,它的主要目的是在我使用热键(当前使用的是“键盘”库)时运行一个迷你游戏(使用“pygame”库)。我希望这个热键被普遍认可,所以我把整个东西打包成一个状态栏应用程序(使用“rumps”库)。在
到目前为止,我可以开始整个事情,从状态栏下拉列表中选择Play,它就工作了!伟大的。在
但是,如果我尝试使用绑定热键来运行Play触发器的相同函数,我得到:
python[58226:599749] pid(58226)/euid(0) is calling TIS/TSM in non-main thread
environment, ERROR : This is NOT allowed. Please call TIS/TSM in main thread!!!
这个出现了四次,并被跟踪
^{pr2}$为了确认它不是热键本身,我做了一个测试:如果我把热键连接到一个更简单的功能上,比如设置一个警报,它就可以正常工作了。它仍然抱怨,并给我错误:
python[60308:620099] -[NSAlert runModal] may only be invoked from the main thread. Behavior on other threads is undefined. (
0 AppKit 0x00007fff2b7f563f -[NSAlert runModal] + 178
1 _objc.cpython-36m-darwin.so 0x000000010c1358c7 ffi_call_unix64 + 79
2 ??? 0x000070000f3b2e50 0x0 + 123145557847632
)
但它确实在运行。但是,如果它连接到Play函数,它就会中断(并产生上面的第一个错误)。在
总结一下:
1)Dropdown=>;运行迷你游戏:成功!在
2)热键=>;运行迷你游戏:无法理解的错误!在
我在google上搜索了这个错误,但是只看到了一些我无法理解的解释;有没有一种方法可以让我绕过这个错误,使用不同的软件,或者不同的方法,但是不必离开python,或者对底层系统进行一些深入而邪恶的黑客攻击?在
我能让热键/游戏使用主线程环境吗?怎样?在
我可以使用状态栏应用程序以外的其他车辆来监听热键吗?(更新:我尝试了pynput,得到了相同的非主线程错误。)
我能不能在pygame内部做点什么,不让它成为攻击性的?(目前,它实际上只是动画一个滚动的正弦波。)
我能让rumps回调函数正常工作吗?目前,它只是什么都不做,不管它叫到哪里或怎么叫。在
(不幸的是,这在Mac上,因为pyhk3仅适用于windows,而且 wx.窗口(可以有热键)也仅适用于windows)
进一步的失败:也不能让它和键盘大师一起运行——我以前从来没有用过它,所以很可能是用错了,但它看起来像是一个非常简单的命令,完全没有响应。在
啊还有。。。Automator脚本运行,但是——不是用热键!(编辑:热键显然被拿走了。但另一个成功了!见下文。)
这个问题是MacOS 10.13 Sierra错误。正在与处理.org3d应用程序,以及一个叫做Synergy的程序。在
我接受我自己的答案,因为这是迄今为止唯一一个能解决我最感兴趣的问题的答案,也就是说,让它以一个全局快捷方式运行,但是,由于我理想地希望打包和分发这个问题,我仍然很高兴看到在python中解决了这个问题的答案,并且很乐意给予奖励对任何这样的回答。在
最后,最后,让它与Automator中的服务和系统首选项>;键盘>;快捷键一起工作。一路上,我不得不
相关问题 更多 >
编程相关推荐