2012-02-24 14 views
1

私はQGraphicsViewに画像QPixmapがあるQGraphicssceneを持っています。 QPixmap QGraphicsItem.ItemIsMovableに解決しました。そして私はそれが動いたときに絵の位置を知りたい。どうしたらいいですか?pyqt画像位置を取得

答えて

1

現在の画像位置を知りたい場合は、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_()) 
関連する問題