是否可以将一个 QGraphicsPixmapItem 附加到另一个?
Is it possible to attach one QGraphicsPixmapItem to another?
我目前正在 Python 中使用 PyQt4,但我无法在网上找到有关在 PyQt UI 上的 GraphicsView class 中组合 2 个不同项目的任何信息一起。这可能吗?
目标是将一个 QGraphicsPixmapItem 锚定到 GraphicsView 中的另一个 class,这样当一个位置改变或旋转时,另一个也会跟随。更重要的是,一个 QGraphicsPixmapItem 是否可以锚定到另一个 QGraphicsPixmapItem 的特定位置?例如。边缘,以便在旋转或移动其他图形项目时,锚定的图形项目将保持在相对于移动项目的确切位置。
如果您希望一个项目在最后一个项目旋转或移动时不改变其相对于另一个项目的位置,那么第一个项目是第二个项目的子项目就足够了:
import random
import sys
from PyQt4 import QtCore, QtGui
def create_pixmap(size):
pixmap = QtGui.QPixmap(size)
pixmap.fill(QtGui.QColor(*random.sample(range(255), 3)))
return pixmap
class VariantAnimation(QtCore.QVariantAnimation):
def updateCurrentValue(self, value):
pass
if __name__ == "__main__":
app = QtGui.QApplication(sys.argv)
w = QtGui.QMainWindow()
scene = QtGui.QGraphicsScene(w)
view = QtGui.QGraphicsView(scene)
parent_item = scene.addPixmap(create_pixmap(QtCore.QSize(150, 150)))
parent_item.setTransformOriginPoint(parent_item.boundingRect().center())
parent_item.setFlag(QtGui.QGraphicsItem.ItemIsMovable, True)
child_item = QtGui.QGraphicsPixmapItem(
create_pixmap(QtCore.QSize(70, 70)), parent_item
)
# or
# child_item = QtGui.QGraphicsPixmapItem(create_pixmap(QtCore.QSize(70, 70)))
# child_item.setParentItem(parent_item)
animation = VariantAnimation(
startValue=0, endValue=360, duration=1000, loopCount=-1
)
animation.valueChanged.connect(parent_item.setRotation)
animation.start()
w.setCentralWidget(view)
w.resize(640, 480)
w.show()
sys.exit(app.exec_())
我目前正在 Python 中使用 PyQt4,但我无法在网上找到有关在 PyQt UI 上的 GraphicsView class 中组合 2 个不同项目的任何信息一起。这可能吗?
目标是将一个 QGraphicsPixmapItem 锚定到 GraphicsView 中的另一个 class,这样当一个位置改变或旋转时,另一个也会跟随。更重要的是,一个 QGraphicsPixmapItem 是否可以锚定到另一个 QGraphicsPixmapItem 的特定位置?例如。边缘,以便在旋转或移动其他图形项目时,锚定的图形项目将保持在相对于移动项目的确切位置。
如果您希望一个项目在最后一个项目旋转或移动时不改变其相对于另一个项目的位置,那么第一个项目是第二个项目的子项目就足够了:
import random
import sys
from PyQt4 import QtCore, QtGui
def create_pixmap(size):
pixmap = QtGui.QPixmap(size)
pixmap.fill(QtGui.QColor(*random.sample(range(255), 3)))
return pixmap
class VariantAnimation(QtCore.QVariantAnimation):
def updateCurrentValue(self, value):
pass
if __name__ == "__main__":
app = QtGui.QApplication(sys.argv)
w = QtGui.QMainWindow()
scene = QtGui.QGraphicsScene(w)
view = QtGui.QGraphicsView(scene)
parent_item = scene.addPixmap(create_pixmap(QtCore.QSize(150, 150)))
parent_item.setTransformOriginPoint(parent_item.boundingRect().center())
parent_item.setFlag(QtGui.QGraphicsItem.ItemIsMovable, True)
child_item = QtGui.QGraphicsPixmapItem(
create_pixmap(QtCore.QSize(70, 70)), parent_item
)
# or
# child_item = QtGui.QGraphicsPixmapItem(create_pixmap(QtCore.QSize(70, 70)))
# child_item.setParentItem(parent_item)
animation = VariantAnimation(
startValue=0, endValue=360, duration=1000, loopCount=-1
)
animation.valueChanged.connect(parent_item.setRotation)
animation.start()
w.setCentralWidget(view)
w.resize(640, 480)
w.show()
sys.exit(app.exec_())