Python >> Tutoriel Python >  >> Python GUI >> PyQt GUI

Comment faire sauter une fenêtre PyQT4 au premier plan ?

Cela fonctionne :

# this will remove minimized status 
# and restore window with keeping maximized/normal state
window.setWindowState(window.windowState() & ~QtCore.Qt.WindowMinimized | QtCore.Qt.WindowActive)

# this will activate the window
window.activateWindow()

Les deux sont nécessaires pour moi sur Win7.

setWindowState restaure la fenêtre réduite et donne le focus. Mais si la fenêtre perd le focus et n'est pas réduite, elle ne donnera pas le focus.

activateWindow donne le focus mais ne restaure pas l'état réduit.

L'utilisation des deux a l'effet désiré.


Cela fonctionne pour moi pour relever la fenêtre mais PAS l'avoir en haut tout le temps :

# bring window to top and act like a "normal" window!
window.setWindowFlags(window.windowFlags() | QtCore.Qt.WindowStaysOnTopHint)  # set always on top flag, makes window disappear
window.show() # makes window reappear, but it's ALWAYS on top
window.setWindowFlags(window.windowFlags() & ~QtCore.Qt.WindowStaysOnTopHint) # clear always on top flag, makes window disappear
window.show() # makes window reappear, acts like normal window now (on top now but can be underneath if you raise another window)

Je n'ai pas eu de chance avec les méthodes ci-dessus, j'ai fini par devoir utiliser l'api win32 directement, en utilisant un hack pour la version C ici. Cela a fonctionné pour moi :

from win32gui import SetWindowPos
import win32con

SetWindowPos(window.winId(),
             win32con.HWND_TOPMOST, # = always on top. only reliable way to bring it to the front on windows
             0, 0, 0, 0,
             win32con.SWP_NOMOVE | win32con.SWP_NOSIZE | win32con.SWP_SHOWWINDOW)
SetWindowPos(window.winId(),
             win32con.HWND_NOTOPMOST, # disable the always on top, but leave window at its top position
             0, 0, 0, 0,
             win32con.SWP_NOMOVE | win32con.SWP_NOSIZE | win32con.SWP_SHOWWINDOW)
window.raise_()
window.show()
window.activateWindow()