如何在QtGraphicsView / QtGraphicsScene(PyQt4)中的某个位置放置图像?

时间:2016-04-19 09:21:31

标签: python qt pyqt4

我正在使用Qt Designer和PyQt4创建一个应用程序。我想知道如何将图像添加到QtGraphicsView窗口小部件到我想要的位置。 例如,当我点击QtGraphicsView小部件时,我想将图像添加到该确切位置。我在网上搜索过,但找不到任何帮助。

我创建了一个场景子类来管理将在QtGraphicsView窗口小部件中显示的项目。我能够得到我点击的地方的坐标,但我不知道如何将项目放在该特定位置。以下是我的代码:

class graphicsScene(QtGui.QGraphicsScene):
    def __init__(self, parent=None):
        super(graphicsScene, self).__init__(parent)

    def mousePressEvent(self, event):
        position = QtCore.QPointF(event.scenePos())
        pixmap = QtGui.QPixmap("host.png")
        pixmap_scaled = pixmap.scaled(30, 30,    QtCore.Qt.KeepAspectRatio)
        self.itemAt(pixmap_scaled,position.x(),position.y())

        self.addPixmap(pixmap_scaled)
        print "pressed here: " + str(position.x()) + ", " + str(position.y())
        self.update()


    def mouseReleaseEvent(self, event):
        position = QtCore.QPointF(event.scenePos())
        print "released here: " + str(position.x()) + ", " + str(position.y())
        self.update()

class form(QtGui.QMainWindow):
    def __init__(self):
        super(mininetGUI, self).__init__()
        self.ui = uic.loadUi('form.ui')

        self.scene = graphicsScene()
        self.ui.view.setScene(self.scene)

1 个答案:

答案 0 :(得分:0)

使用addItem(your_pixmap_object)QPixmap添加到场景中。然后,您可以在返回的setPos(...)上使用QGraphicsItem(当您使用addItem(...)时会返回此项,并且该项目已成功插入到场景中。)您传递给{的点{1}}将成为事件的一部分(正如您已经通过调用setPos(...)所做的那样)。

event.scenePos()

如果您想使用pixmap = QPixmap(...) sceneItem = self.addItem(pixmap) sceneItem.setPos(event.scenePos()) ,则此过程与上述过程相同,但只需使用QGraphicsPixmapItem,就像您在代码中所做的那样。

除了放置项目之外,还有一件事你可能想要处理 - 在你按下鼠标按钮的情况下,在按下按钮的同时将光标移动到场景中的其他位置,然后释放它。这会将项目插入到移动事件的起始位置(按下按钮并移动),但这可能不是您想要做的。您必须考虑是否更好地处理self.addPixmap(...)内部的插入。这实际上取决于你希望这个特定场景的工作方式。