PyQt边缘透阴影明窗口实现
来源:互联网 发布:阿里云学生专区 编辑:程序博客网 时间:2024/06/05 14:07
实现类似QQ的无边框窗口界面的边缘效果
主要有几点:
第一,窗口要设置称无边框:
self.setWindowFlags(Qt.FramelessWindowHint)
第二,窗口要设置成透明:
self.setAttribute(Qt.WA_TranslucentBackground,True)
第三,就是主要实现方法了,主要是在paintEvent方法中进行绘制实现的:
可以修改边缘效果的宽度:m的值,可以看到这个方法是先先将除了边缘m宽度的整个窗口填充为白色(可以自定义),然后利用一个for循环,在外围绘制了m条线,而且由内到外逐渐变得透明。
主要有几点:
第一,窗口要设置称无边框:
self.setWindowFlags(Qt.FramelessWindowHint)
第二,窗口要设置成透明:
self.setAttribute(Qt.WA_TranslucentBackground,True)
第三,就是主要实现方法了,主要是在paintEvent方法中进行绘制实现的:
def paintEvent(self,event): m = 9 path = QPainterPath() path.setFillRule(Qt.WindingFill) path.addRect(m, m, self.width()-m*2, self.height()-m*2) painter = QPainter(self) #painter.setRenderHint(QPainter.Antialiasing, True) painter.fillPath(path, QBrush(Qt.white)) color = QColor(100, 100, 100, 30) #for(int i=0; i<10; i++) for i in range(m): path = QPainterPath() path.setFillRule(Qt.WindingFill) path.addRoundRect(m-i, m-i, self.width()-(m-i)*2, self.height()-(m-i)*2,1,1) color.setAlpha(90 - math.sqrt(i)*30) painter.setPen(QPen(color,1,Qt.SolidLine)) painter.drawRoundRect(QRect(m-i, m-i, self.width()-(m-i)*2, self.height()-(m-i)*2), 0,0)
可以修改边缘效果的宽度:m的值,可以看到这个方法是先先将除了边缘m宽度的整个窗口填充为白色(可以自定义),然后利用一个for循环,在外围绘制了m条线,而且由内到外逐渐变得透明。
下面贴上源代码(可以直接运行),供小伙伴们参考和改进。
#coding:utf-8'''Created on 2015��8��1��@author: guowu'''from PyQt4.QtGui import QWidget, QApplication, QPainterPath, QPainter, QBrush,\ QColor, QPenfrom PyQt4.QtCore import Qt, QSize, QRect, QPointimport sysimport mathclass TestFrame(QWidget): def __init__(self,parent=None): super(TestFrame,self).__init__(parent) self.setWindowFlags(Qt.FramelessWindowHint) self.setAttribute(Qt.WA_TranslucentBackground,True) self.setFixedSize(QSize(500,500)) self.currentPos = None def mousePressEvent(self,event): self.currentPos = event.pos() def mouseMoveEvent(self,event): self.move(QPoint(self.pos()+event.pos()-self.currentPos)) def paintEvent(self,event): m = 9 path = QPainterPath() path.setFillRule(Qt.WindingFill) path.addRect(m, m, self.width()-m*2, self.height()-m*2) painter = QPainter(self) #painter.drawLine(QLineF) #painter.setRenderHint(QPainter.Antialiasing, True) painter.fillPath(path, QBrush(Qt.white)) color = QColor(100, 100, 100, 30) #for(int i=0; i<10; i++) for i in range(m): path = QPainterPath() path.setFillRule(Qt.WindingFill) path.addRoundRect(m-i, m-i, self.width()-(m-i)*2, self.height()-(m-i)*2,1,1) color.setAlpha(90 - math.sqrt(i)*30) painter.setPen(QPen(color,1,Qt.SolidLine)) painter.drawRoundRect(QRect(m-i, m-i, self.width()-(m-i)*2, self.height()-(m-i)*2), 0,0) # path = QPainterPath()# path.setFillRule(Qt.WindingFill)# path.addRect(m-i, m-i, self.width()-(m-i)*2, self.height()-(m-i)*2)# color.setAlpha(90 - math.sqrt(i)*30)# painter.setPen(QPen(color,1))# painter.drawPath(path) if __name__ == "__main__": app = QApplication(sys.argv) c = TestFrame() c.show() app.exec_()
阅读全文
1 0
- PyQt边缘透阴影明窗口实现
- pyqt实现窗口边框阴影效果(python)
- [MFC] WS_EX_LAYERED 实现透明异形窗口(酷狗歌词、360加速球、窗口边缘阴影)
- 实现WinForm窗口阴影
- Pyqt实现无边框窗口拖动及改变窗口大小
- ListView 实现阻尼回弹效果 并去除边缘阴影
- 转:QT实现阴影窗口(一)
- 转:QT实现阴影窗口(二)
- 转:QT实现阴影窗口(三)
- 实现带阴影弹出窗口的技术
- Qt/QML 窗口阴影边框实现
- QML实现窗口拖拽与阴影
- Qt/QML窗口阴影边框实现
- 如何实现窗口阴影效果 (SysShadow、分层窗口、DWM)
- 如何实现窗口阴影效果 (SysShadow、分层窗口、DWM)
- 如何实现窗口阴影效果 (SysShadow、分层窗口、DWM)
- 如何实现窗口阴影效果 (SysShadow、分层窗口、DWM)
- 如何实现窗口阴影效果 (SysShadow、分层窗口、DWM)
- Xcode9 json文件加载不到 返回地址为空
- 欢迎使用CSDN-markdown编辑器
- 计算机视觉领域的一些牛人博客,超有实力的研究机构等的网站链接
- java后台post和get请求方法
- EditText的聚焦和监听
- PyQt边缘透阴影明窗口实现
- 第5周 【项目一】 建立顺序栈算法库
- mysql 创建一个用户赋予指定权限
- Jmeter详解
- 如何用ISO镜像制作openstack镜像或者虚拟机
- windows下搭建vue开发环境+IIS部署
- 通过spring的aop注解实现所有方法异常的捕获处理,sqlite SQLITE_BUSY异常
- ReactiveCocoa冷热信号与并发编程
- Qt打包文档(windows平台)