0

我的应用程序有一个可以在左键单击时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()返回TrueFalse或者。

我只是不知道在哪里可以QMainWindow看到。

Debian 拉伸,伴侣 1.16.2,Python 3.5.3。我可以用 PyQt4 和 PyQt5 重现。

4

1 回答 1

0

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

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()
于 2017-07-06T22:26:26.627 回答