PyQt5无边框圆角阴影
在做 PyQt 窗口开发中经常会遇到要做一些无边框不规则的窗口,可能还会带有阴影效果,这里演示做一个简单的无边框圆角的窗口,原理就在于背景窗口的透明和一层有色背景控件的叠加。
# 原理说明
黑色(方便说明)的 QDialog 或者 QWidget 作为全透明无边框窗口。
其中白色的 QWidget 才是主要显示圆角和阴影的窗口,用于承载其它控件的显示。
注意红色和紫色的方框内的层次。
另:如果要熟悉纯代码编写请看 FramelessDialog.py
如图:
# 代码
https://github.com/PyQt5/PyQt/blob/master/Demo/FramelessDialog.py
#!/usr/bin/env python
# -*- coding: utf-8 -*-
"""
Created on 2019年4月25日
@author: Irony
@site: https://pyqt5.com https://github.com/892768447
@email: 892768447@qq.com
@file: FramelessWidget
...
PyQt5动画边框阴影
为子控件增加动画阴影效果,结合 QGraphicsDropShadowEffect 和 QPropertyAnimation 动态改变阴影半径达到效果,在旧版本的 Qt 中 QGraphicsDropShadowEffect 可能会有点问题(父控件会影响子控件)
# 原理
原理是利用 QGraphicsDropShadowEffect 添加边框阴影,然后使用动画不停改变阴影的模糊半径来达到效果,如图:
# 简单说明
继承 QGraphicsDropShadowEffect 增加动态属性 radius
通过 setGraphicsEffect 方法设置控件的边框阴影
通过 QPropertyAnimation 属性动画不断改变 radius 的值并调用 setBlurRadius 更新半径值
https://github.com/PyQt5/PyQt/blob/master/QGraphicsDropShadowEffect/ShadowEffect.py
# 自定义类
#!/usr/bin/env python
# -*- coding: utf-8 -*-
...