如何为 QTreeWidgetItem 添加彩色动画?

我需要向 QTreeWidgetItem 添加彩色动画,但在我的代码中,它会引发一些错误,有人可以帮助我吗?


代码示例在这里:


class TreeWigetItem(QTreeWidgetItem):

    def __init__(self, parent=None):

        super().__init__(parent)


    @pyqtProperty(QBrush)

    def bcolor(self):

        return self.background(0)


    @bcolor.setter

    def bcolor(self, color):

        self.setBackground(0, color)

        self.setBackground(1, color)

并像这样调用方法:


child_item = TreeWigetItem()

self.child_item_ani = QPropertyAnimation(child_item, b'bcolor')

self.child_item_ani.setDuration(1000)

self.child_item_ani.setEndValue(QBrush(Qt.red))

self.child_item_ani.start()

这里的错误:


self.child_item_ani = QPropertyAnimation(child_item, b'bcolor')  

TypeError: arguments did not match any overloaded call:  

  QPropertyAnimation(parent: QObject = None): argument 1 has unexpected type 'TreeWigetItem'  

  QPropertyAnimation(QObject, Union[QByteArray, bytes, bytearray], parent: QObject = None): argument 1 has unexpected type 'TreeWigetItem'  



POPMUISE
浏览 276回答 1
1回答

跃然一笑

属性(PyQt 中的pyqtProperty)仅在 QObjects 中有效,但在这种情况下QTreeWidgetItem不会从 QObject 继承,因此QPropertyAnimation也不起作用。因此,QPropertyAnimation您应该使用QVariantAnimation如下所示的,而不是使用:import osfrom PyQt5 import QtCore, QtGui, QtWidgetsclass TreeWidgetItem(QtWidgets.QTreeWidgetItem):    @property    def animation(self):        if not hasattr(self, "_animation"):            self._animation = QtCore.QVariantAnimation()            self._animation.valueChanged.connect(self._on_value_changed)        return self._animation    def _on_value_changed(self, color):        for i in range(self.columnCount()):            self.setBackground(i, color)if __name__ == "__main__":    import sys    app = QtWidgets.QApplication(sys.argv)    w = QtWidgets.QTreeWidget(columnCount=2)    it = TreeWidgetItem(["Foo", "Bar"])    # setup animation    it.animation.setStartValue(QtGui.QColor("white"))    it.animation.setEndValue(QtGui.QColor("red"))    it.animation.setDuration(5 * 1000)    it.animation.start()    # add item to QTreeWidget    w.addTopLevelItem(it)    w.show()    sys.exit(app.exec_())
打开App,查看更多内容
随时随地看视频慕课网APP

相关分类

Python