首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >如何让pyqt应用停留在像Rainmeter这样的所有窗口的底部?

如何让pyqt应用停留在像Rainmeter这样的所有窗口的底部?
EN

Stack Overflow用户
提问于 2020-11-10 16:50:03
回答 2查看 66关注 0票数 0

我需要把我的窗户保持在底部。我试过使用WindowStaysOnBottomHint,但当点击Win+DShow Desktop时,应用程序会最小化。

我研究发现,当使用python SetWindowPos点击Show Desktop时,Rainmeter会对Z索引进行重新排序,但我无法找到python QT的解决方案。

请给我一个解决方案!!

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2020-11-11 04:05:29

我找到了使用python的win32应用程序接口(仅适用于windows)的解决方案。请参阅SetWindowPosSetWindowLongwin32gui

代码语言:javascript
复制
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窗口

票数 0
EN

Stack Overflow用户

发布于 2020-11-10 23:05:01

一种简单的解决方法是检查hideEvent()并确保事件为spontaneous (这意味着事件来自应用程序外部,如本例中的系统),然后调用showNormal()

代码语言:javascript
复制
class MyWindow(QtWidgets.QWidget):
    # ...
    def hideEvent(self, event):
        if event.spontaneous():
            self.showNormal()

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

代码语言:javascript
复制
    def changeEvent(self, event):
        if (event.type() == QtCore.QEvent.WindowStateChange and 
            event.spontaneous() and 
            self.windowState() == QtCore.Qt.WindowMinimized):
                self.showNormal()
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/64765617

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档