如何在pyqt中实现win10亚克力效果
2021/4/11 18:31:10
本文主要是介绍如何在pyqt中实现win10亚克力效果,对大家解决编程问题具有一定的参考价值,需要的程序猿们随着小编来一起学习吧!
亚克力效果的实现思路
上一篇博客《如何在pyqt中实现窗口磨砂效果》 中实现了win7中的Aero效果,但是和win10的亚克力效果相比,Aero还是差了点内味。所以今天早上又在网上搜了一圈,无意中发现了这篇博客《使用 SetWindowCompositionAttribute 来控制程序的窗口边框和背景》,点进去认真看了一遍之后深受启发,于是又去改了一下上次实现Aero效果时所用的函数,重新编译为dll给python调用,需要注意的是,要想成功使用编译好的dll必须在Visual Studio里面装好C++,如果不想装的话可以参见《如何在pyqt中通过调用SetWindowCompositionAttribute实现Win10亚克力效果》,这里面用纯Python的方法实现了亚克力效果。
具体实现流程
- 在
WindowCompositionAttribute.h
的枚举类ACCENT_STATE
中新增一个ACCENT_ENABLE_ACRYLICBLURBEHIND
参数,初值为4; - 定义setBlur()函数的时候,
ACCENT_POLICY accent = { ACCENT_ENABLE_ACRYLICBLURBEHIND, 0, gradientColor, 0 }
,和上次相比列表的第一个参数变成了ACCENT_ENABLE_ACRYLICBLURBEHIND
,第三个参数由0变为了gradientColor
,这个参数用来设置窗口的背景色; - 在VS2019里面把写好的函数编译为
acrylic.dll
; - 在python中通过
hWnd=ctypes.wintypes.HWND(int(self.winId()))
,把WId类型强制转换为HWND类型,接着设置背景色gradientColor = DWORD(0x50F2F2F2)
,0x50F2F2F2
的前两位是透明度,后面六位是bgr,最后ctypes.cdll.LoadLibrary('acrylic_dll\\\acrylic.dll').setBlur(hWnd,gradientColor)
,实现动态链接库的载入和接口函数的调用,源代码如下:
import sys from ctypes import cdll from ctypes.wintypes import HWND, DWORD from PyQt5.QtCore import Qt from PyQt5.QtWidgets import QApplication, QWidget class Demo(QWidget): """ 亚克力效果的实现 """ def __init__(self): super().__init__() self.resize(500, 500) # 去除边框,没有这一步的话窗口阴影也会加上亚克力效果 self.setWindowFlags(Qt.FramelessWindowHint) # 背景透明 self.setAttribute(Qt.WA_TranslucentBackground) # 调用api hWnd = HWND(int(self.winId())) # 直接HWND(self.winId())会报错 gradientColor = DWORD(0x50F2F2F2) # 设置和亚克力效果相叠加的背景颜色 cdll.LoadLibrary('acrylic_dll\\acrylic.dll').setBlur(hWnd, gradientColor) if __name__ == "__main__": app = QApplication(sys.argv) demo = Demo() demo.show() sys.exit(app.exec_())
运行效果如下(硝子依旧如此美丽٩(๑>◡<๑)۶)
源代码以及dll
百度网盘(提取码:2la9):链接
这篇关于如何在pyqt中实现win10亚克力效果的文章就介绍到这儿,希望我们推荐的文章对大家有所帮助,也希望大家多多支持为之网!
- 2024-11-01后台管理开发学习:新手入门指南
- 2024-11-01后台管理系统开发学习:新手入门教程
- 2024-11-01后台开发学习:从入门到实践的简单教程
- 2024-11-01后台综合解决方案学习:从入门到初级实战教程
- 2024-11-01接口模块封装学习入门教程
- 2024-11-01请求动作封装学习:新手入门教程
- 2024-11-01登录鉴权入门:新手必读指南
- 2024-11-01动态面包屑入门:轻松掌握导航设计技巧
- 2024-11-01动态权限入门:新手必读指南
- 2024-11-01动态主题处理入门:新手必读指南