2017-07-05 2 views
0

Mon application a un qui permet de basculer la visibilité QMainWindow lorsque vous avez cliqué sur le bouton gauche de la souris.QMainWindow problème de visibilité lors du changement de bureau virtuel

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) 

Il fonctionne correctement, sauf si je passe le bureau virtuel tandis que le QMainWindow est visible.

Par exemple:

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 

Je ne reçois que le QMainWindow retour en redémarrant l'application.

I ajouté print s dans la méthode ci-dessus et peut vérifier que nous traversons

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

parce que self.main_window.isVisible() retours True et False alternativement.

Je ne connais pas QMainWindow est visible.

Debian Stretch, Mate 1.16.2, Python 3.5.3. Je peux reproduire avec PyQt4 et PyQt5.

Répondre

0

Il apparaît la fenêtre est réduite au minimum lorsqu'elle est masquée alors montré d'un autre bureau, mais je ne pouvais pas voir que parce qu'elle ne figure pas dans la barre des tâches, car il a des drapeaux suivants:

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

Je fixe la question en l'annulant explicitement lors d'un événement de spectacle:

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