Для масштабирования у меня есть пользовательский QGraphicsView, который выглядит следующим образом:
from PyQt5.QtWidgets import QGraphicsView, QSizePolicy
class GraphicsView(QGraphicsView):
def __init__(self):
super(GraphicsView, self).__init__()
# Graphics view variables
self.start = None
self.end = None
self.box_list = list()
self.__zoom = 0
self.setSizePolicy(QSizePolicy(QSizePolicy.Expanding, QSizePolicy.Expanding))
def wheelEvent(self, event):
if event.angleDelta().y() > 0:
factor = 1.25
self.__zoom += 1
else:
factor = 0.8
if self.__zoom > 0:
self.scale(factor, factor)
elif self.__zoom == 0:
# self.fitInView()
pass
else:
self.__zoom = 0
Исходя из того, что вы можете иметь pysignal и делать излучение при определенных уровнях самообъявления .__ масштабирования, позволяя подключить этот сигнал к методукоторый будет отвечать за изменение панели инструментов или что-то еще, что вам нужно.
Например:
from PyQt5.QtWidgets import QGraphicsView, QSizePolicy
from PyQt5.QtCore import pyqtSignal
class GraphicsView(QGraphicsView):
zoom_signal = pyqtSignal(bool)
def __init__(self):
super(GraphicsView, self).__init__()
# Graphics view variables
self.start = None
self.end = None
self.box_list = list()
self.__zoom = 0
self.setSizePolicy(QSizePolicy(QSizePolicy.Expanding, QSizePolicy.Expanding))
def wheelEvent(self, event):
if event.angleDelta().y() > 0:
factor = 1.25
self.__zoom += 1
else:
factor = 0.8
if self.__zoom > 0:
self.scale(factor, factor)
if self.__zoom > 10:
self.zoom_signal.emit(True)
elif self.__zoom < 10:
self.zoom_signal.emit(False)
else:
self.__zoom = 0
Это, вероятно, не будет работать, как для ваших нужд, но концепция есть иможно изменить, чтобы сделать то, что вы хотите.