Diese Klasse ist meine aktuelle Grafikansicht. Darin präsentiere ich in graphicsscene. Diese Grafikansicht wird durch die Zoom-Funktionen skaliert (die Sie unten sehen können).PyQT Zoomen wird durch mouseMoveEvent() gestört, warum?
from PySide import QtCore, QtGui
ZOOM_FACTOR = 2
MAX_ALLOWED_ZOOM = 4
class MapGraphicsView(QtGui.QGraphicsView):
def __init__(self, parent):
QtGui.QGraphicsView.__init__(self, parent)
self.resize(parent.size().width(), parent.size().height())
self.setAlignment(33)
self.setTransformationAnchor(QtGui.QGraphicsView.AnchorUnderMouse)
self.setResizeAnchor(QtGui.QGraphicsView.AnchorUnderMouse)
self.setFrameShape(QtGui.QFrame.NoFrame)
self.max_allowed_zoom = MAX_ALLOWED_ZOOM
# Signal variables used to notify listeners. Listeners are connected in actions.py
pressed = QtCore.Signal(QtCore.QEvent)
released = QtCore.Signal(QtCore.QEvent)
moved = QtCore.Signal(QtCore.QEvent)
# Notify listeners when window is clicked
def mousePressEvent(self, event):
self.pressed.emit(event)
def mouseReleaseEvent(self, event):
self.released.emit(event)
def mouseMoveEvent(self, event):
#self.moved.emit(event)
pass
def zoom_in(self):
self.scale(ZOOM_FACTOR, ZOOM_FACTOR)
def zoom_out(self):
self.scale(1/ZOOM_FACTOR, 1/ZOOM_FACTOR)
Wirklich, alles funktioniert wunderbar. Nun, es tut, wenn ich das mouseMoveEvent entferne, das im folgenden Code zu sehen ist. Wenn ich das Ereignis entferne, funktioniert alles genau wie vorgesehen: Der Zoom ist perfekt und zentriert direkt über dem Cursor.
Wenn ich die verlassen in mousemove, obwohl es führt nur eine Aktion ..
def mouseMoveEvent(self, event):
#self.moved.emit(event)
pass
.. und das Handeln ist Pass die gesamte Zoomfunktion drastisch ändert. Anstatt auf den Mauszeiger zu zoomen, sieht es so aus, als gäbe es keinen Zoom-Anker und das Zoom-Ziel folgt stattdessen einem ganz anderen System.
Da die Zoomfunktion in meinem Produkt entscheidend ist, muss ich das lösen. Jede Hilfe würde sehr geschätzt werden.
Jede Hilfe würde sehr geschätzt werden! – RasmusJ
Mit Ihrem Code kann ich Ihr gemeldetes Verhalten nicht wiederholen, da es kein vollständiges Beispiel ist. Es scheint mir in Ordnung zu sein, obwohl Sie die super().-Methoden irgendwo in den überschriebenen Methoden aufrufen könnten, um sicher zu gehen. – Trilarion