1 回答

TA貢獻1868條經驗 獲得超4個贊
您可以為此使用信號,而不是嘗試直接縮放視圖:
將以下代碼添加到PhotoViewer:
class PhotoViewer(QtWidgets.QGraphicsView):
scaled = QtCore.pyqtSignal(int, int, QtGui.QTransform, int)
....
def scale(self, horz, vert):
super().scale(horz, vert)
self.scaled.emit(self.horizontalScrollBar().value(),
self.verticalScrollBar().value(),
self.transform(),
self._zoom
)
def set_transform(self, horz_scroll, vert_scroll, transform, zoom):
# temporary block signals from scroll bars to prevent interference
horz_blocked = self.horizontalScrollBar().blockSignals(True)
vert_blocked = self.verticalScrollBar().blockSignals(True)
self._zoom = zoom
self.setTransform(transform)
dx = horz_scroll - self.horizontalScrollBar().value()
dy = vert_scroll - self.verticalScrollBar().value()
self.horizontalScrollBar().setValue(dx)
self.verticalScrollBar().setValue(dy)
self.horizontalScrollBar().blockSignals(horz_blocked)
self.verticalScrollBar().blockSignals(vert_blocked)
并ui:
class ui(QtWidgets.QWidget):
def __init__(self):
....
self.viewer.scaled.connect(self.viewer2.set_transform)
self.viewer2.scaled.connect(self.viewer.set_transform)
同時刪除對ui.test()form的調用PhotoViewer.wheelEvent。
添加回答
舉報