Проблема видимости QMainWindow при переключении виртуального рабочего стола
Мое приложение имеет QSystemTrayIcon
это переключает QMainWindow
видимость при щелчке левой кнопкой мыши.
def tray_icon_activated_cb(reason):
if reason == QtWidgets.QSystemTrayIcon.Trigger:
self.main_window.setVisible(not self.main_window.isVisible())
self.activated.connect(tray_icon_activated_cb)
Он работает правильно, за исключением случаев, когда я переключаю виртуальный рабочий стол, пока QMainWindow
виден
Например:
On virtual desktop 1, window hidden
Click
On virtual desktop 1, window visible
Click
On virtual desktop 1, window hidden
Change desktop
On virtual desktop 2, window hidden
Click
On virtual desktop 2, window visible
Click
On virtual desktop 2, window hidden
Change desktop
On virtual desktop 1, window hidden
Click
On virtual desktop 1, window visible
Change desktop
On virtual desktop 2, window hidden
Click
On virtual desktop 2, window hidden <- wrong
Change desktop
On virtual desktop 1, window hidden
Click
On virtual desktop 1, window hidden <-- still wrong
Я получаю QMainWindow только после перезапуска приложения.
я добавил print
s в методе выше и может проверить, что мы проходим
self.main_window.setVisible(not self.main_window.isVisible())
так как self.main_window.isVisible()
возвращается True
а также False
в качестве альтернативы.
Я просто не знаю, где это QMainWindow
виден
Debian Stretch, Mate 1.16.2, Python 3.5.3. Я могу воспроизвести с PyQt4 и PyQt5.
1 ответ
Похоже, что окно свернуто, когда оно скрыто, а затем показано с другого рабочего стола, но я не смог увидеть это, потому что оно не отображается на панели задач, так как имеет следующие флаги:
self.setWindowFlags(QtCore.Qt.Tool |
QtCore.Qt.FramelessWindowHint |
QtCore.Qt.WindowStaysOnTopHint)
Я исправил проблему, явно ее минимизировав в событии show:
def showEvent(self, event):
super().showEvent(event)
# Ensure the window is not minimized on virtual desktop change
self.showNormal()