pyqt получить положение изображения - PullRequest
1 голос
/ 24 февраля 2012

У меня есть QGraphicsscene, на котором есть изображение QPixmap в QGraphicsView. Я решил QPixmap QGraphicsItem.ItemIsMovable. И я хочу получить положение картинки при ее перемещении. Как я могу это сделать?

1 Ответ

1 голос
/ 24 февраля 2012

Если вы просто хотите узнать текущее положение изображения, вы можете получить его от pixmapItem.pos() или pixmapItem.x() и pixmapItem.y().

Но если вам нужно знать, когда оно перемещается, вы можетеподкласс QGraphicsPixmapItem, установите флаг QGraphicsItem.ItemSendsGeometryChanges и получите уведомление в переопределенной функции itemChange:

#!/usr/bin/env python
# -*- coding: utf-8 -*-
import sys
from PyQt4 import QtCore, QtGui


class MovablePixmapItem(QtGui.QGraphicsPixmapItem):
    def __init__(self, pixmap, *args, **kwargs):
        QtGui.QGraphicsPixmapItem.__init__(self, pixmap, *args, **kwargs)
        self.setFlags(QtGui.QGraphicsItem.ItemIsMovable |
                      QtGui.QGraphicsItem.ItemSendsGeometryChanges)

    def itemChange(self, change, value):
        if change == QtGui.QGraphicsItem.ItemPositionHasChanged:
            print value.toPointF()
            # do other work, or emit signal
        return QtGui.QGraphicsPixmapItem.itemChange(self, change, value)


class MainWidget(QtGui.QWidget):
    def __init__(self, parent=None):
        QtGui.QWidget.__init__(self, parent)
        self.pixmapItem = MovablePixmapItem(QtGui.QPixmap('image.png'))
        self.scene = QtGui.QGraphicsScene()
        self.scene.addItem(self.pixmapItem)
        self.view = QtGui.QGraphicsView(self.scene)
        layout = QtGui.QVBoxLayout()
        layout.addWidget(self.view)
        self.setLayout(layout)

    def do_test(self):
        pass


if __name__ == "__main__":
    app = QtGui.QApplication(sys.argv)
    widget = MainWidget()
    widget.resize(640, 480)
    widget.show()
    sys.exit(app.exec_())
...