PySide6自绘异形图案实现内阴影

本文介绍了在PySide6中如何实现自定义的内阴影异形组件。作者在开发过程中发现缺少相关解决方案,通过自己的探索,提出了一个通过自绘图形并模拟阴影效果的方法,最终达到接近设计图的效果。文章分为三个步骤,详细阐述了从绘制目标图形、实现阴影到消除阴影溢出的整个过程,提供了关键代码示例。
摘要由CSDN通过智能技术生成

前言

最近在使用PySide6开发一样东西的时候,需要实现一个带有内阴影的异形组件,但找了很多资料文档,都没有多好的解决方案;就连万能的AI也没能给我很好的答案,最终自己瞎捣鼓了一个方案,自认为效果还不错,特此分享。

吐槽: 没想到在前端仅需一个box-shadow即可实现的效果在PySide6中竟然如此难实现,直至今日,官方竟也没有一个多好的解决方案(难度QT没有这样的需求,还是PySide6没有,当然也可能是我不知道)
小声BB: QGraphicsDropShadowEffect也并不好用,还只能实现外阴影,效果也不强大

front-view
这就是前端的设计图,需用PySide6实现,最终效果虽稍有偏差,但还算说得过去。
其对应的box-shadowinset 3px 3px 6px 0px rgba(255, 255, 255, 0.7),inset -3px -3px 6px 0px rgba(0, 0, 0, 0.3);,为黑白两层内阴影构成。

第一步

首先需绘制一个目标图形,由于是异形,非寻常图形,所以需自己重写paintEvent,大致代码如下

class CustomFrame(QFrame):
    def __init__(self, parent: QWidget = None):
        super().__init__(parent)

    def paintEvent(self, event):
        painter = QPainter(self)
        painter.setRenderHint(QPainter.Antialiasing, True)
        size = self.size()
        path = self.getPath(size.width(), size.height())
        
        painter.setPen(QColor(41, 177, 150))
        painter.setBrush(QColor(41, 177, 150))
        painter.drawPath(path)
        painter.setBrush(QBrush())
        
    def getPath(self, width: int, height: int) -> QPainterPath:
        """获取异形路径"""
  • 19
    点赞
  • 41
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值