当前位置:   article > 正文

pyqt实现窗口边框阴影效果(python)_python 窗口 第三方库 阴影

python 窗口 第三方库 阴影

参考QT例子,做下记录:


思路:

1.准备图片

2.设置边框显示宽度

 self.SHADOW_WIDTH=8

3. 实现方法

  1. def drawShadow(self,painter):
  2. #绘制左上角、左下角、右上角、右下角、上、下、左、右边框
  3. self.pixmaps=QStringList()
  4. self.pixmaps.append(QString("./img/border/left_top.png"))
  5. self.pixmaps.append(QString("./img/border/left_bottom.png"))
  6. self.pixmaps.append(QString("./img/border/right_top.png"))
  7. self.pixmaps.append(QString("./img/border/right_bottom.png"))
  8. self.pixmaps.append(QString("./img/border/top_mid.png"))
  9. self.pixmaps.append(QString("./img/border/bottom_mid.png"))
  10. self.pixmaps.append(QString("./img/border/left_mid.png"))
  11. self.pixmaps.append(QString("./img/border/right_mid.png"))
  12. painter.drawPixmap(0, 0, self.SHADOW_WIDTH, self.SHADOW_WIDTH, QPixmap(self.pixmaps[0])) #左上角
  13. painter.drawPixmap(self.width()-self.SHADOW_WIDTH, 0, self.SHADOW_WIDTH, self.SHADOW_WIDTH, QPixmap(self.pixmaps[2])) #右上角
  14. painter.drawPixmap(0,self.height()-self.SHADOW_WIDTH, self.SHADOW_WIDTH, self.SHADOW_WIDTH, QPixmap(self.pixmaps[1])) #左下角
  15. painter.drawPixmap(self.width()-self.SHADOW_WIDTH, self.height()-self.SHADOW_WIDTH, self.SHADOW_WIDTH, self.SHADOW_WIDTH, QPixmap(self.pixmaps[3])) #右下角
  16. painter.drawPixmap(0, self.SHADOW_WIDTH, self.SHADOW_WIDTH, self.height()-2*self.SHADOW_WIDTH, QPixmap(self.pixmaps[6]).scaled(self.SHADOW_WIDTH, self.height()-2*self.SHADOW_WIDTH)) #左
  17. painter.drawPixmap(self.width()-self.SHADOW_WIDTH, self.SHADOW_WIDTH, self.SHADOW_WIDTH, self.height()-2*self.SHADOW_WIDTH, QPixmap(self.pixmaps[7]).scaled(self.SHADOW_WIDTH, self.height()- 2*self.SHADOW_WIDTH)) #右
  18. painter.drawPixmap(self.SHADOW_WIDTH, 0, self.width()-2*self.SHADOW_WIDTH, self.SHADOW_WIDTH, QPixmap(self.pixmaps[4]).scaled(self.width()-2*self.SHADOW_WIDTH, self.SHADOW_WIDTH)) #上
  19. painter.drawPixmap(self.SHADOW_WIDTH, self.height()-self.SHADOW_WIDTH, self.width()-2*self.SHADOW_WIDTH, self.SHADOW_WIDTH, QPixmap(self.pixmaps[5]).scaled(self.width()-2*self.SHADOW_WIDTH, self.SHADOW_WIDTH)) #下
'
运行

4.绘图

  1. def paintEvent(self, event):
  2. painter = QPainter(self)
  3. self.drawShadow(painter)
  4. painter.setPen(Qt.NoPen)
  5. painter.setBrush(Qt.white)
  6. painter.drawRect(QRect(self.SHADOW_WIDTH, self.SHADOW_WIDTH, self.width()-2*self.SHADOW_WIDTH, self.height()-2*self.SHADOW_WIDTH))
'
运行

写一个类,后面只要继承这个类就可以了, 记得去掉标题栏和设置背景透明:

  1. self.setWindowFlags(Qt.FramelessWindowHint)
  2. self.setAttribute(Qt.WA_TranslucentBackground)

效果如下:


声明:本文内容由网友自发贡献,不代表【wpsshop博客】立场,版权归原作者所有,本站不承担相应法律责任。如您发现有侵权的内容,请联系我们。转载请注明出处:https://www.wpsshop.cn/w/运维做开发/article/detail/985365
推荐阅读
相关标签
  

闽ICP备14008679号