gpt4 book ai didi

python - 不透明度的 QVariantAnimation : the item appears at the end of the animation

转载 作者:行者123 更新时间:2023-12-01 07:28:24 25 4
gpt4 key购买 nike

这是一个示例,其中图形项目出现在动画的末尾,而不是按应有的顺序出现。

import sys

from PyQt5 import QtWidgets, QtCore
from PyQt5.QtCore import Qt, QEasingCurve
from PyQt5.QtGui import QPixmap
from PyQt5.QtWidgets import QMainWindow, QGraphicsScene, QGraphicsView, QGraphicsPixmapItem, QGraphicsItem


class QStone(QGraphicsPixmapItem):
def __init__(self):
QGraphicsPixmapItem.__init__(self)

white = QPixmap("white2.png")
self.setPixmap(white.scaled(60, 60, Qt.KeepAspectRatio))
self.w = self.boundingRect().width()
self.h = self.boundingRect().height()


class QBoard(QGraphicsView):
def __init__(self,scene):
QGraphicsView.__init__(self)
self.scene=scene
self.setScene(scene)

def display_stone(self, x, y):
stone = QStone()
stone.setZValue(10)
stone.setOpacity(0)
stone.setPos(x - stone.w / 2, y - stone.h / 2)
self.scene.addItem(stone)

animation = QtCore.QVariantAnimation(self.scene)
animation.setDuration(3000)
animation.valueChanged.connect(stone.setOpacity)
# animation.setStartValue(0)
# animation.setEndValue(1)
animation.setParent(self.scene)
animation.setEasingCurve(QEasingCurve.BezierSpline)
animation.start()


class MainWindow(QMainWindow):
def __init__(self):

#all the usual stuff
QMainWindow.__init__(self)
centralWidget = QtWidgets.QWidget(self)
self.setCentralWidget(centralWidget)
mainLayout = QtWidgets.QGridLayout()
centralWidget.setLayout(mainLayout)
self.scene = QGraphicsScene()
self.view = QBoard(self.scene)
mainLayout.addWidget(self.view,0,0)
self.scene.setSceneRect(-200.0,-150.0,400.0,300.0)

self.view.display_stone(0,0)

app = QtWidgets.QApplication(sys.argv)
main_win = MainWindow()
main_win.show()
sys.exit(app.exec_())

请放置任何图像文件,而不是white2.png。

知道为什么它会这样工作吗?

总而言之,我也可以使用 QPropertyAnimation,但可能需要做更多的工作才能获得相同的结果。

最佳答案

QVariantAnimation 使用从 startValue 和 endValue 中传递的值扣除的数据类型生成动画,在您的情况下,不放置它意味着使用整数,或者放置相同的 0 和 1 使整数值在插值。 0 和 1 之间可以插入哪些整数值?因为只有 0 和 1,例如对于 t = 0.5 * T,考虑到它是否是线性的,不透明度值应该为 0.5,但如何使用整数,然后舍入将其设置为 0,并且它只会当 t = T 时可见。解决方案是将其作为 0.0 的 startValue 和 1.0 的 endValue 传递。

animation = QtCore.QVariantAnimation(self.scene)
animation.setDuration(3000)
animation.valueChanged.connect(stone.setOpacity)
animation.setStartValue(0.0) # <---
animation.setEndValue(1.0) # <---
animation.setParent(self.scene)
animation.setEasingCurve(QEasingCurve.BezierSpline)
animation.start()

关于python - 不透明度的 QVariantAnimation : the item appears at the end of the animation,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/57333239/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com