TIS/TSM非主线程错误;pygame脚本由热键(rumps、pygame、keyboard)触发

2024-06-01 06:00:12 发布

您现在位置:Python中文网/ 问答频道 /正文

我正在编写一个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脚本运行,但是——不是用热键!(编辑:热键显然被拿走了。但另一个成功了!见下文。)


Tags: 函数in应用程序playismain错误键盘
2条回答

这个问题是MacOS 10.13 Sierra错误。正在与处理.org3d应用程序,以及一个叫做Synergy的程序。在

我接受我自己的答案,因为这是迄今为止唯一一个能解决我最感兴趣的问题的答案,也就是说,让它以一个全局快捷方式运行,但是,由于我理想地希望打包和分发这个问题,我仍然很高兴看到在python中解决了这个问题的答案,并且很乐意给予奖励对任何这样的回答。在

最后,最后,让它与Automator中的服务和系统首选项>;键盘>;快捷键一起工作。一路上,我不得不

  • 显式地调用我想要使用的python二进制文件,因为Automator在执行文本脚本时使用的bashshell显然不同于终端中的bashshell
  • 请注意,系统首选项快捷方式不起作用是因为我第一次选择了组合键,而不是因为它被阻止了,因为我调用它时没有错误或消息。在
  • 可能还有其他的事情。上帝啊。在

相关问题 更多 >