zoukankan      html  css  js  c++  java
  • pyqt5 动画学习(二) 改变控件颜色

    上一篇我们通过  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 tutorial
    
    This program animates the color of a
    widget with QPropertyAnimation.
    
    Author: Seshigure 401219180@qq.com
    Last 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))这里使用了一个关键帧,让动画完成 粉色>红色>米黄的颜色转换

     
  • 相关阅读:
    GitHub注册和Git安装
    Git克隆与更新代码
    三,jenkins配置构建执行状态
    四,jenkins设置定时任务
    二,jenkins创建构建任务
    一,jenkins环境搭建
    Python Selenium Web自动化上传/下载文件图文详解
    Robot Framework自动化测试(七)--- jybot模式
    jmeter eval函数之妙用(参数化文件内含各种表达式)
    jmeter ssh+jdbc用法
  • 原文地址:https://www.cnblogs.com/semishigure/p/8491966.html
Copyright © 2011-2022 走看看