Aktivieren von Schwenken und Zoomen in ein QGraphicsView
Bin ich mit python und dem Qt Designer zu implementieren laden von tiff-Bildern und zum aktivieren von Schwenken und Zoomen auf einige Maus-Ereignis (Rad - zoom, drücken Sie auf Rad - pan).
Ich war auf der Suche in einigen Optionen und Klassen, Arbeit mit Bildern etc, und so weit ich gefunden habe:
QGraphicsScene, QImage, QGraphicsView
Ich habe drei Klassen (nur Prüfung)
-
ViewerDemo, die QGraphicsView element:
"""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 Klasse, das ist QDialog, wo ich Anrufe-Klasse ViewerDemo, lade Bild, und legen Sie das Bild in QGraphicsView
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) ist nur, wo die Anwendung ausgeführt wird:
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_())
Fand ich wie etwas zu tun, auf die Maus klicken (Links und Rad klicken), drucken pixel-Koordinaten (ich brauche das, um die Koordinaten in das Koordinatensystem des Bildes, WGS84, zum Beispiel).
Was ich brauche, mehr, ist, wie zoom-Bild (Rad oder doppelklicken Sie, was auch immer) und pan-Bild (halten der linken Maustaste oder mit Rad).
Oder, gibt es eine bessere Qt-Klassen, dies zu tun, und einige besser Weg
Können Sie mir bitte helfen?
Dies ist, was ich bisher mit diesem code
Du musst angemeldet sein, um einen Kommentar abzugeben.
Dies ist nicht allzu schwer zu tun mit den integrierten Funktionen von
QGraphicsView
.Den demo-Skript unten Links-Knopf-panning-und zoom-Rad (einschließlich Verankerung an der aktuellen cursor-position). Die
fitInView
Methode wurde neu implementiert, da die eingebaute version fügt eine seltsame Feste Marge, die nicht entfernt werden können.PyQt4-version:
PyQt5 version:
self.scale(factor, factor)
mit welchem Skalierungsfaktor die Sie mögen.super(PhotoViewer, self).mouseMoveEvent(event)
. Wenn das nicht funktioniert, eine neue Frage stellen, und zeigen den tatsächlichen code.Ist es möglich, zum öffnen von TIFF-Dateien bis zu mehrere Gigabyte mit normalen PIL (Kissen) - Bibliothek. Es ist nicht ganz einfach, aber es funktioniert.
Konnte man sehen, das Beispiel hier, zweites Beispiel nach Fett BEARBEITEN string öffnen konnte, zu bewegen und zoom-TIFF-Dateien.