Как создать пункт меню в OSX Menubar с помощью Pyinstaller упакованного приложения Kivy Python?


Чтобы достичь чувства родности в моем Pyinstaller упакованном приложении Kivy Python, я хотел бы создать пункт меню в строке меню OSX. Если использовать PyQt, я могу легко достичь этого. Но поскольку я использую Kivy, мне кажется, что я должен прибегнуть к другим способам.

Есть предложения? Я думаю, что это будет в диапазоне PyObjc или AppleScript. Хотя не уверен.

3 2

3 ответа:

Я думаю, что это больше к вопросу Pyinstaller, что это как вопрос Kivy.

Это ни то, ни другое :)

PyInstaller просто оборачивает приложение python в нативный пакет приложений OS X.
Поскольку Kivy не имеет возможности создавать значок меню в OS X, вам придется придерживаться PyObjC.

Во-первых, вы должны установить Xcode (если он еще не установлен). Вы можете скачать его из App Store или от разработчика Apple Центр .

Затем установите сам PyObjC:

pip install pyobjc

Уже есть несколько примеров (Первый, еще один ) О создании значка строки состояния с помощью PyObjC.

Есть также потрясающая библиотека под названием rumps что значительно упрощает код, необходимый для создания значков строки состояния, меню и действий. Возможно, это поможет вам при взаимодействии со строкой состояния.

Графическим бэкенд-провайдером Kivy является OpenGl, таким образом приложения Kivy могут работать на любой ОС (IOS, Android, Linux, Windows, ...) по уникальному лицу. вы можете использовать kivy ActionBar, чтобы показать меню или создать пользовательский виджет, который трудно. эта связь также Эта Одна может помочь вам.

Если использовать PyQt, я могу легко достичь этого. Но поскольку я использую Kivy, это похоже, мне придется прибегнуть к другим способам

Я не понимаю, почему вы не можете просто использовать метод PyQt. Создайте отдельный файл, который запускает значок, вызываемый вашим основным приложением Kivy.
Как и PyQt, я уверен, что Kivy имеет функцию выхода, которую можно переопределить и заставить ее убить поток значков при выходе из приложения.

Только потенциальная обратная сторона (которую я могу придумать с верхней части моего head) заключается в том, что он может работать медленнее, чем реализация в PyObjC.