Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/design-patterns/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python 如何使PyQT4窗口跳到前面?_Python_Pyqt4 - Fatal编程技术网

Python 如何使PyQT4窗口跳到前面?

Python 如何使PyQT4窗口跳到前面?,python,pyqt4,Python,Pyqt4,当应用程序从另一台机器接收到指定消息时,我想使PyQT4窗口(QtGui.QMainWindow)跳到前面。 通常窗口是最小化的 我尝试了raise() # this will remove minimized status # and restore window with keeping maximized/normal state window.setWindowState(window.windowState() & ~QtCore.Qt.WindowMinimized | Q

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

我尝试了
raise()

# 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上所必需的

setWindowsState
恢复最小化的窗口并提供焦点。但是,如果窗口只是失去了焦点而没有最小化,它将无法提供焦点

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


使用这两种方法都能达到预期的效果。

我对上述方法没有任何运气,最终不得不直接使用win32 api,对C版本进行了破解。这对我很有用:

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

这对我来说很管用,可以升起窗户,但不能一直把它放在上面:

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

对于我来说,在Windows 10上使用NVidia GPU时,这一点很有效:

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

我在这个答案上找到了答案:

我尝试了本页上的所有其他建议。这是唯一一个在Windows10上对我有效的<代码>window.setWindowFlags(window.windowFlags()| QtCore.Qt.WindowStaysOnTopHint);window.show()
事实上,两者都不适用于我的Windows 10。可能是NVidia的一些奇怪问题。不适用于Windows 10。