0

我需要让我的窗口保持在底部。我尝试使用WindowStaysOnBottomHint,但是当单击Win+D或时Show Desktop,应用程序最小化。

我研究并发现当使用 Win32 Api 单击显示桌面时,Rainmeter 会重新排序 Z-index,SetWindowPos但我无法找到 python QT 的解决方案。

请给我解决方案!!

4

2 回答 2

0

一个简单的解决方法是检查hideEvent()并确保事件是自发的(这意味着事件源自应用程序外部,例如您的情况下来自系统),然后调用showNormal()

class MyWindow(QtWidgets.QWidget):
    # ...
    def hideEvent(self, event):
        if event.spontaneous():
            self.showNormal()

为了安全起见,您还可以检查changeEvent()和过滤WindowStateChange事件:

    def changeEvent(self, event):
        if (event.type() == QtCore.QEvent.WindowStateChange and 
            event.spontaneous() and 
            self.windowState() == QtCore.Qt.WindowMinimized):
                self.showNormal()
于 2020-11-10T15:05:01.487 回答
0

我找到了使用 win32 API for python (Only for windows) 的解决方案。参考SetWindowPos , SetWindowLong , win32gui

if sys.platform=='win32':
    from ctypes import windll
    import win32gui,win32con
    win32gui.SetWindowPos(window.winId(),win32con.HWND_BOTTOM, 0,0,0,0, win32con.SWP_NOMOVE | win32con.SWP_NOSIZE  | win32con.SWP_NOACTIVATE )

    hwnd=win32gui.GetWindow(win32gui.GetWindow(windll.user32.GetTopWindow(0),win32con.GW_HWNDLAST),win32con.GW_CHILD);
    win32gui.SetWindowLong(window.winId(),win32con.GWL_HWNDPARENT,hwnd)

window是 QTWidget 窗口

于 2020-11-10T20:05:29.470 回答