切换虚拟桌面时QMainWindow可见性问题

时间:2017-07-05 22:39:50

标签: python pyqt virtual-desktop mate-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,可以检查我们是否通过了

self.main_window.setVisible(not self.main_window.isVisible())

因为self.main_window.isVisible()会另外返回TrueFalse

我只是不知道 QMainWindow可见。

Debian Stretch,Mate 1.16.2,Python 3.5.3。我可以用PyQt4和PyQt5重现。

1 个答案:

答案 0 :(得分:0)

当隐藏然后从另一个桌面显示时,窗口显示为最小化,但我看不到它,因为它没有出现在任务栏中,因为它有以下标志:

self.setWindowFlags(QtCore.Qt.Tool |
                    QtCore.Qt.FramelessWindowHint |
                    QtCore.Qt.WindowStaysOnTopHint)

我通过在show event上明确地将其最小化来解决问题:

def showEvent(self, event):
    super().showEvent(event)
    # Ensure the window is not minimized on virtual desktop change
    self.showNormal()