- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
我正在尝试在 PyQt5 中为 QGraphicsPixmapItem 制作动画。程序按原样崩溃,没有任何错误消息,删除有关变量“anime”的行使程序正常工作。
这是 QGraphicsPixMapItem:
class QStone(QGraphicsPixmapItem,QGraphicsObject):
def __init__(self, color, movable):
QGraphicsPixmapItem.__init__(self)
QGraphicsObject.__init__(self)
if movable:
self.setFlag(QGraphicsItem.ItemIsMovable)
white = QPixmap("ressources/white2.png")
black = QPixmap("ressources/black_stone.png")
empty = QPixmap("ressources/no_stone.jpg")
if color == Player.white:
self.setPixmap(white.scaled(60, 60, Qt.KeepAspectRatio))
elif color == Player.black:
self.setPixmap(black.scaled(60, 60, Qt.KeepAspectRatio))
self.w = self.boundingRect().width()
self.h = self.boundingRect().height()
def hoverEnterEvent(self, event):
self.setCursor(Qt.OpenHandCursor)
self.setOpacity(0.5)
event.accept()
def hoverLeaveEvent(self, event):
self.setCursor(Qt.ArrowCursor)
self.setOpacity(1.)
event.accept()
使用 QPropertyAnimation 似乎需要 QGraphicsObject 继承。
这是包含此动画的代码:(此方法属于 QGraphicsView 的子类):
def display_stone(self, x, y, color=None):
stone = ""
# if color is None:
# stone = QStone("", True)
if color == Player.white:
stone = QStone(Player.white, False)
elif color == Player.black:
stone = QStone(Player.black, False)
stone.setOpacity(0.0)
anime = QPropertyAnimation(stone, b"opacity",self)
anime.setDuration(800)
anime.setStartValue(0.0)
anime.setEndValue(1.0)
anime.start()
stone.setPos(x - stone.w / 2, y - stone.h / 2)
self.scene.addItem(stone)
stone.setZValue(10)
有什么想法吗?谢谢
最佳答案
与 Qt C++ API 不同,PyQt 不允许双重继承(特殊情况除外(1)),因此您无法实现从 QGraphicsPixmapItem 和 QGraphicsObject 继承的类。
在这种情况下,有以下选项:
1.本例中是创建一个QObject来处理你想要修改的属性,也就是QPropertyAnimation处理的对象:
class OpacityManager(QObject):
opacityChanged = pyqtSignal(float)
def __init__(self, initial_opacity, parent=None):
super(OpacityManager, self).__init__(parent)
self._opacity = initial_opacity
@pyqtProperty(float, notify=opacityChanged)
def opacity(self):
return self._opacity
@opacity.setter
def opacity(self, v):
if self._opacity != v:
self._opacity = v
self.opacityChanged.emit(self._opacity)
class QStone(QGraphicsPixmapItem):
def __init__(self, color, movable=False):
QGraphicsPixmapItem.__init__(self)
self.manager = OpacityManager(self.opacity())
self.manager.opacityChanged.connect(self.setOpacity)
if movable:
self.setFlag(QGraphicsItem.ItemIsMovable)
# ...
# ...
anime = QPropertyAnimation(stone.manager, b"opacity", stone.manager)
# ...
2.另一个选项是 QVariantAnimation:
# ...
anime = QVariantAnimation(self)
anime.valueChanged.connect(stone.setOpacity)
anime.setDuration(800)
# ...
(1) https://www.riverbankcomputing.com/static/Docs/PyQt5/qt_interfaces.html
关于python - 为 QGraphicsPixmapItem 制作动画,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/57311232/
我目前正在 Python 中使用 PyQt4,但我无法在网上找到任何有关将 PyQt UI 上的 GraphicsView 类中的 2 个不同项目组合在一起的信息。这可能吗? 目标是将一个 QGrap
我目前正在 Python 中使用 PyQt4,但我无法在网上找到任何有关将 PyQt UI 上的 GraphicsView 类中的 2 个不同项目组合在一起的信息。这可能吗? 目标是将一个 QGrap
我不久前开始使用 PyQt4,现在我尝试使用 QGraphicsItemAnimation 创建一个小动画。我以前从未使用 PyQt4 这样做过,我总是使用 pygame。必须有不同的图层,qpixm
QGraphicsPixmapItem 和 QGraphicsItem 一样,有一个方法 update(x0, y0, width, height),以便仅在 QGraphicsScene 上部分重绘
我在缩放和转换 QGraphicsPixmapItem 时遇到问题。我创建了图形编辑器,我在其中使用初始大小为 100,100 的 QGraphicsItem,之后我通过 setTransform()
我希望我的 QGraphicsPixmapItem 在 QGraphicScene 上变得可选(即可以更一般的方式点击),但它不是。我实际上是在修改 Qt 的 Diagram Scene sample
我正在使用 QGraphicsScene/View 开发自定义小部件,但我之前没有相关经验。 自定义小部件是一个图像查看器,需要跟踪鼠标移动并向其父对话框/窗口发送信号。信号将是鼠标光标下像素的位置及
我创建了这样的东西。我创建了一个 QGraphicsPixmapItem 对象,可以将其添加到 QGraphicsView 中。我想将端口添加到我创建的这些对象中。我想在这些端口和我创建的对象之间建立
我正在尝试在 PyQt5 中为 QGraphicsPixmapItem 制作动画。程序按原样崩溃,没有任何错误消息,删除有关变量“anime”的行使程序正常工作。 这是 QGraphicsPixMap
首先,我是一个完全的初学者所以请原谅我,如果这个问题很愚蠢或被误导了。我有以下问题,我创建这样的图形 setPixmap(QPixmap(":Graphics/Terrain")); (这是一个正方形
我需要一个对象,它结合了 QGraphicsPixmapItem 和 QGraphicsTextItem(图像 + 文本)的特性。 多重继承是最好的方法还是有任何禁忌症?如果有,您有什么建议? 最佳答
我正在开发一个以 Qt 4.8 作为 GUI 框架的 C++ 应用程序:一个子类 QGraphicsView 渲染一个子类 QGraphicsScene,其中包含一个或多个子类 QGraphicsPi
我想在我的QGraphicsScene中使用QPropertyAnimation为QGraphicsPixmapItem设置动画。 QPixmap pixmap(filePath); QGraphic
我有两个QGraphicsPixmapItem,它们的边缘都是透明的,而且它们不是矩形。当我尝试使用 QGraphicsItem::collidingItems() 时,它只检查它们的边界矩形是否发生
我正在尝试创建自己的 QGraphicsPixmapItem,我可以在其中激活悬停模式,并且我想在悬停在项目的矩形上时绘制黑色边框,并在离开矩形空间时恢复正常。 我开始了这段代码,但不知道接下来要做什
我编写了一个小代码来使用 QtCreator 测试 QGraphicsView 的功能。 代码非常简单,只是创建了一个继承自 QGraphicsView 的类,上面有一个 QGraphicsScene
我继承了 QGraphicsView(类 Display)并实现了从 QTableView 拖放。 QGraphicsScene 中有预先存在的项目,并且 scene()->itemsBounding
我正在尝试实现一个基本游戏... 我按下键盘按钮,但我添加到我的 QGraphicsScene 的 QGraphicsPixmapItem不动,我实现了一个keyPressedEvent函数... 我
我正在使用 QGraphicsScene,我想要一些在移动时发出信号的项目。 不幸的是,QGraphicsPixmapItem 没有任何信号,所以我将它子类化: class InteractiveGr
我在 QGraphicsScene 中有一个 QGraphicsPixmapItem,然后我在 QGraphicsView 中放大并旋转它。如果没有旋转或者我没有放大太多,一切都很好,但是当我放大(像
我是一名优秀的程序员,十分优秀!