Вам необходимо подавать сигнал всякий раз, когда изменяется масштаб, и QHeaderView.setDefaultSectionSize()
для вертикального заголовка. Обратите внимание, что вам, вероятно, следует использовать setSectionResizeMode(QHeaderView.Fixed)
, чтобы избежать изменения размера пользователя (или просто оставить его на Interactive
, но, конечно, не используйте Stretch
или ResizeToContents
).
Очевидно, вы должны убедиться, что диапазон действителен, или найти свой собственный алгоритм (который очищает значение до допустимого диапазона, который имеет минимум 1).
В этом случае я использовал исходное значение по умолчанию и умножил его, используя масштабный коэффициент преобразования вида (см. QTransform> рендеринг графики о значении матрицы преобразования).
class MyWindow(QtWidgets.QMainWindow):
def __init__(self):
super(MyWindow, self).__init__()
# Main characteristics of the window
self.setGeometry(50, 50, 1000, 700)
#User Interface
self.initUI()
self.view.scaleChanged.connect(self.resizeRows)
self.defaultSize = self.table.verticalHeader().defaultSectionSize()
def resizeRows(self, scale):
self.table.verticalHeader().setDefaultSectionSize(scale * self.defaultSize)
class viewFor(QtWidgets.QGraphicsView):
scaleChanged = QtCore.pyqtSignal(float)
# ...
def wheelEvent(self, event):
self.setTransformationAnchor(self.AnchorUnderMouse)
zoom_in_factor = 1.1
zoom_out_factor = 1 / zoom_in_factor
# Save the scene pos
old_position = self.mapToScene(event.pos())
if event.modifiers() == QtCore.Qt.ControlModifier:# CTRL + Scroll -> X and Y Zoom
# Zoom
if event.angleDelta().y() > 0:
zoom_factor = zoom_in_factor
else:
zoom_factor = zoom_out_factor
self.scale(zoom_factor, zoom_factor)
# emit the signal based on the transformation scale factor
self.scaleChanged.emit(self.transform().m11())
# ...
Обратите внимание, что вам не нужно использовать QApplication.keyboardModifiers
, так как Вы можете получить доступ к modifiers()
всех событий клавиатуры / мыши.