切换虚拟桌面时 QMainWindow 可见性问题
QMainWindow visibility issue when switching virtual desktop
我的应用程序有一个 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()
returnsTrue
和False
交替。
我只是不知道 哪里 QMainWindow
可见。
Debian Stretch,伴侣 1.16.2,Python 3.5.3。我可以用 PyQt4 和 PyQt5 重现。
看起来 window 在隐藏时最小化然后从另一个桌面显示,但我看不到,因为它没有出现在任务栏中,因为它有以下标志:
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()
我的应用程序有一个 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()
returnsTrue
和False
交替。
我只是不知道 哪里 QMainWindow
可见。
Debian Stretch,伴侣 1.16.2,Python 3.5.3。我可以用 PyQt4 和 PyQt5 重现。
看起来 window 在隐藏时最小化然后从另一个桌面显示,但我看不到,因为它没有出现在任务栏中,因为它有以下标志:
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()