Мока правильно, он должен работать в соответствии с документами.Однако это не связано с ошибкой 61898 в Qt.
Обходной путь - дождаться, пока системный трей будет доступен с помощью isSystemTrayAvailable()
.Как Уэс Хардакер предлагает , вы можете попробовать каждые несколько секунд, используя QTimer::singleShot()
, пока не появится системный трей.
Обратите внимание, что если вы show()
значок на панели задач, как только системный трейдоступно, он всегда будет отображаться снова, даже если системный трей удален и создан новый (как сказано в документации), поэтому вам нужно только правильно его настроить в первый раз.
Я используюPyQt5, и я заменил
self.show()
на
self._show_when_systray_available()
def _show_when_systray_available(self):
"""Show status icon when system tray is available
If available, show icon, otherwise, set a timer to check back later.
This is a workaround for https://bugreports.qt.io/browse/QTBUG-61898
"""
if self.isSystemTrayAvailable():
self.show()
else:
QtCore.QTimer.singleShot(1000, self._show_when_systray_available)
Я вижу только один (довольно маловероятный) сбойный случай: состояние гонки, когда системный трей удаляется в небольшом количествевремя после isSystemTrayAvailable()
возвращает true
и до того, как отображается значок вашего состояния.
Редактировать : в соответствии с багтрекер , это было исправлено в 5.12.4.