TIS/TSM неосновна грешка в нишката; pygame скрипт, задействан от бърз клавиш (rumps, pygame, клавиатура)

Пиша приложение на python, чиято основна цел е да стартира мини игра (използвайки библиотеката „pygame“), когато използвам клавишна комбинация (която в момента използва библиотеката „клавиатура“). Искам тази клавишна комбинация да се разпознава универсално, така че пакетирам всичко като приложение за лента на състоянието (използвайки библиотеката „rumps“).

Засега мога да започна всичко, да избера Пусни от падащото меню на лентата на състоянието и работи! Страхотен.

ОБАЧЕ, ако се опитам да използвам обвързаната клавишна комбинация, за да стартирам същата функция, която задейства 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!!!

Това се показва четири пъти и се проследява

python[58226:599749] WARNING: nextEventMatchingMask should only be
called from the Main Thread! This will throw an exception in the future.

За да проверя дали това не е самият клавиш за бърз достъп, направих тест: Ако свържа клавиша за бърз достъп с по-проста функция, като настройка на предупреждение, той работи добре. Все още се оплаква и ми дава грешката:

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
)

но ТИЧА. Ако обаче се свърже с функцията за възпроизвеждане, той се прекъсва (и създава първата грешка по-горе).

Да обобщим:

1) Падащо меню => стартиране на мини игра: Успех!

2) Бърз клавиш => стартиране на мини игра: Неразбираеми грешки!

Потърсих в Google тази грешка, но видях само обяснения, които са далеч над главата ми; има ли начин да заобиколя тази грешка, като използвам различен софтуер или различен подход -- но без да се налага да напускам python или да извършвам някакъв дълбок и зъл хак на основна система?

Мога ли по някакъв начин да накарам клавишната комбинация/играта да ИЗПОЛЗВА средата на основната нишка? как?

Мога ли да използвам превозно средство, различно от приложение за лента на състоянието, за да слушам за бързия клавиш? (Актуализация: Опитах pynput и получих същата грешка, която не е основна нишка.)

Мога ли да направя нещо вътре в pygame, за да не го направя толкова обидно? (В момента буквално анимира подвижна синусоида.)

Мога ли да накарам функцията за обратно извикване на rumps да работи? В момента просто не прави НИЩО, независимо къде и как се казва.

(И за съжаление, това е на Mac, защото pyhk3 е само за Windows, а wx.Window (който може да има клавишни комбинации) също е само за Windows)

ДОПЪЛНИТЕЛНА грешка: Не мога да го накарам да работи и с Keyboard Maestro -- никога не съм го използвал преди, така че може да го използвам погрешно, но също така изглежда като МНОГО проста команда, която просто няма отговор каквото и да било.

Ааа... скриптът на Automator се изпълнява, но -- не с бързия клавиш! (РЕДАКТИРАНЕ: Бързият клавиш очевидно е бил зает. Но друг проработи! Вижте по-долу.)


person one_observation    schedule 22.07.2018    source източник


Отговори (2)


Този проблем е грешка на MacOS 10.13 Sierra. Отчита се с 3d приложения на Processing.org, както и с програма, наречена Synergy.

person Scott Parris    schedule 28.07.2018
comment
Видях, че създава проблеми на няколко места -- за съжаление, това не решава проблема ми по никакъв начин. Надстройката на OS решава ли проблема? Това проверено ли е? Има ли друг начин да го заобиколите? - person one_observation; 30.07.2018

Приемам собствения си отговор, защото той е единственият досега, който решава проблема, който ме интересуваше най-много, т.е. да накарам нещото да се изпълнява с глобален пряк път, НО тъй като в идеалния случай бих искал да пакетирам и разпространявам това, аз все още много ще се радвам да видя отговори, които решават проблема в рамките на python, и с удоволствие би наградил наградата за всеки отговор, който го направи.

Най-накрая, най-накрая го накара да работи с услуга в Automator и Системни предпочитания> Клавиатура> Преки пътища. По пътя ми се наложи

  • Изрично извикване на двоичния файл на python, който исках да използвам, тъй като bash shell, който Automator използва при изпълнение на текстов скрипт, очевидно е различен от този в Terminal
  • Осъзнайте, че прекият път на системните предпочитания не работи поради комбинацията от клавиши, която първо избрах, НЕ че беше блокиран, защото нямаше грешки или съобщения, когато го извиках.
  • Вероятно всякакви други неща. Мили Боже.
person one_observation    schedule 31.07.2018