博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
pyqt5 动画学习(二) 改变控件颜色
阅读量:6633 次
发布时间:2019-06-25

本文共 2440 字,大约阅读时间需要 8 分钟。

上一篇我们通过  self.anim = QPropertyAnimation(self.label, b"geometry")创建了一个动画,改变了空间的大小,这次我们来改变控件的颜色

但是label是没有color这个动画属性的,即设置  self.anim = QPropertyAnimation(self.label, b"color")是无效的

为此,我们要重写label类,赋予一个color属性,例如:

class MyLabel(QLabel):    def __init__(self, text, para):        super().__init__(text, para)    def _set_color(self, col):        self.setAutoFillBackground(True)        palette = self.palette()        palette.setColor(self.backgroundRole(), col)        self.setPalette(palette)    color = pyqtProperty(QColor, fset=_set_color)

还是通过调色板来改变label的颜色, 然后我们自定义一个名为"color"的属性

color = pyqtProperty(QColor, fset=_set_color)

定义以后我们就可以正常使用这个属性了,例如

self.anim = QPropertyAnimation(self.label, b"color")

 

下面是程式完整代码:

 

#!/usr/bin/python3# -*- coding: utf-8 -*-"""PyQt5 Animation tutorialThis program animates the color of awidget with QPropertyAnimation.Author: Seshigure 401219180@qq.comLast edited: 2018.03.02"""from PyQt5.QtWidgets import *from PyQt5.QtGui import *from PyQt5.QtCore import *class MyLabel(QLabel):    def __init__(self, text, para):        super().__init__(text, para)    def _set_color(self, col):        self.setAutoFillBackground(True)        palette = self.palette()        palette.setColor(self.backgroundRole(), col)        self.setPalette(palette)    color = pyqtProperty(QColor, fset=_set_color)class Example(QWidget):    def __init__(self):        super(Example, self).__init__()        self.initUI()    def initUI(self):        self.button = QPushButton("Start", self)        self.button.clicked.connect(self.doAnim)        self.button.move(30, 30)        self.label = MyLabel("changeColor", self)        self.label._set_color(QColor(255, 50, 50, 50))        self.label.setGeometry(150, 30, 100, 100)        self.setGeometry(300, 300, 380, 300)        self.setWindowTitle('Animation')        self.show()    def doAnim(self):        self.anim = QPropertyAnimation(self.label, b"color")        self.anim.setDuration(3000)        self.anim.setStartValue(QColor(255, 50, 50, 50))  # 粉色         self.anim.setKeyValueAt(0.5, QColor(255, 0, 0, 250))  # 红色        self.anim.setEndValue(QColor(255, 250, 50, 50))  # 米黄        self.anim.start()if __name__ == "__main__":    app = QApplication([])    ex = Example()    ex.show()    app.exec_()

 

 

 

 

界面预览图如下:

 

 

备注:

1、label没有color动画属性,所以我们得重写label

2、self.anim.setKeyValueAt(0.5, QColor(255, 0, 0, 250))这里使用了一个关键帧,让动画完成 粉色>红色>米黄的颜色转换

 

 

 

 

 

 

转载于:https://www.cnblogs.com/semishigure/p/8491966.html

你可能感兴趣的文章
全面屏成行业标配,vivo副总透露将推完成度更高产品
查看>>
linux下监视进程 崩溃挂掉后自动重启的shell脚本
查看>>
nagios对windows流量的检测
查看>>
linq---我为你提笔序,你的美不只查询语句
查看>>
细说堡垒机与数据库审计
查看>>
oracle的MAX_DUMP_FILE_SIZE参数和ora-02065
查看>>
Docker入门教程(三)Dockerfile
查看>>
Android 6.0出现的init: cannot execve(‘XXX’):Permission denied问题:禁止SELINUX的权限设置...
查看>>
Tilera推用于云计算的多核处理器Meshed
查看>>
企业寻求数字化转型 物联网成策略性关键
查看>>
金融科技巨头BATJ高管讨论:中国“监管沙盒”应该怎么做?
查看>>
Alsa音频驱动开发参考
查看>>
CDN企业三分天下 共享模式独树一帜
查看>>
Windows安全认证是如何进行的?[Kerberos篇]
查看>>
你所不知道的CSS滤镜技巧与细节
查看>>
LIFI技术成功组网 速度比WIFI快百倍
查看>>
Appium Android UI自动化简介 + 实战
查看>>
DBA不失业:云时代的数据库性能优化全攻略
查看>>
FrozenJS 针对移动端开发的 js 组件库
查看>>
Windows的Docker Beta版本
查看>>