Como habilitar Pan e Zoom em um QGraphicsView
Estou usando o python e o Qt Designer para implementar o carregamento de imagens tiff e ativar o Pan e o Zoom em algum evento do mouse (zoom de roda, pressionar roda - pan).
Eu estava olhando para algumas opções e classes que podem trabalhar com imagens, etc, e até agora eu encontrei:
QGraphicsScene, QImage, QGraphicsView
Eu tenho três classes (apenas testando)
ViewerDemo que temQGraphicsView elemento:
"""description of class"""
# Form implementation generated from reading ui file 'GraphicsViewdemo.ui'
try:
_fromUtf8 = QtCore.QString.fromUtf8
except AttributeError:
def _fromUtf8(s):
return s
class Ui_Dialog(object):
def setupUi(self, Dialog):
Dialog.setObjectName(("Dialog"))
Dialog.resize(500, 500)
self.graphicsView = QtGui.QGraphicsView(Dialog)
self.graphicsView.setGeometry(QtCore.QRect(0, 0, 500, 500))
self.graphicsView.setObjectName(("graphicsView"))
self.retranslateUi(Dialog)
QtCore.QMetaObject.connectSlotsByName(Dialog)
def retranslateUi(self, Dialog):
Dialog.setWindowTitle(QtGui.QApplication.translate("Dialog", "Dialog", None,
QtGui.QApplication.UnicodeUTF8))
MyForm classe, isto éQDialog, onde eu chamo de classeViewerDemo, carregando Image e coloque a imagem emQGraphicsView
import sys
from ViewerDemo import *
from PyQt4 import QtGui
class MyForm(QtGui.QDialog):
def __init__(self, url, parent=None):
QtGui.QWidget.__init__(self, parent)
self.ui = Ui_Dialog()
self.ui.setupUi(self)
self.scene = QtGui.QGraphicsScene(self)
self.image = QtGui.QImage(url)
pixmap= QtGui.QPixmap.fromImage(self.image)
item=QtGui.QGraphicsPixmapItem(pixmap)
self.scene.addItem(item)
self.ui.graphicsView.setScene(self.scene)
self.scale = 1
QtCore.QObject.connect(self.scene, QtCore.SIGNAL('mousePressEvent()'),self.mousePressEvent)
def mousePressEvent(self, event):
print ('PRESSED : ',event.pos())
(3) é exatamente onde o aplicativo está sendo executado:
from PyQt4 import QtGui, QtCore
import sys
from MyForm import MyForm
if __name__ == "__main__":
app = QtGui.QApplication(sys.argv)
url = "D:/probaTiff"
myapp = MyForm(url)
myapp.show()
sys.exit(app.exec_())
Eu descobri como fazer algo com o clique do mouse (clique esquerdo e roda), para imprimir coordenadas de pixel (vou precisar disso para obter as coordenadas no Sistema de Coordenadas da imagem WGS84, por exemplo).
O que eu preciso mais é como ampliar a imagem (roda ou clique duas vezes, o que for) e mover a imagem (mantendo o botão esquerdo do mouse ou pressionando a roda).
Ou, há algumas aulas de Qt melhores para fazer isso e alguma maneira melhor Você pode me ajudar, por favor?
Isto é o que eu tenho até agora com este código