如何让PyQT4窗口跳到前面?

时间:2012-08-25 03:30:14

标签: python pyqt4

当应用程序从另一台计算机收到指定的消息时,我想让PyQT4窗口(QtGui.QMainWindow)跳转到前面。 通常窗口最小化。

我尝试了raise_()show()方法,但它不起作用。

4 个答案:

答案 0 :(得分:14)

这有效:

# 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()

在Win7上我都需要这两个。

setWindowState恢复最小化窗口并提供焦点。但是如果窗口失去了焦点并且没有最小化,它就不会给焦点。

activateWindow提供焦点,但不会恢复最小化状态。

使用两者都有所期望的效果。

答案 1 :(得分:4)

我对上述方法没有任何好运,最终不得不直接使用win32 api,使用黑客攻击C版here。这对我有用:

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()

答案 2 :(得分:0)

这对我来说可以升起窗户,但始终不能放在顶部:

# 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)

答案 3 :(得分:0)

对于在Windows 10上具有NVidia GPU的我来说,这可行:

from PyQt4 import QtCore
# create window here...
window.setWindowFlags(QtCore.Qt.WindowStaysOnTopHint)

我在以下答案中找到了答案:https://stackoverflow.com/a/12280956/4549682