Я пытаюсь сделать увеличение / уменьшение масштаба, но не только с помощью wheelEvent. Я хочу использовать mouseMoveEvent и сделать масштабирование, как в 3D-программах (Maya), когда нажата кнопка (Alt + Right Mouse) и мышь перемещается вниз / вверх или влево / вправо, она будет увеличивать / уменьшать масштаб. Поэтому я решил взять координаты event.pos (), но масштабирование не требуется, если не нажата правая кнопка мыши. Поэтому я попытался сделать:
def mouseMoveEvent(self, event):
modifierPressed = QApplication.keyboardModifiers( )
if (modifierPressed & Qt.AltModifier) == Qt.AltModifier and event.button( ) == Qt.RightButton:
print('Alt+RightClick')
print(event.pos( ))
Но я заметил, что event.button()
всегда возвращает NoButton
. Почему это происходит? Ниже будет приведен полный код, если кто-то хочет попробовать запустить его, но код требует изображений.
from PySide2.QtGui import QPixmap, QBrush, QColor
from PySide2.QtCore import QSize, Qt, Signal, QPointF, QRect, QPoint
from PySide2.QtWidgets import QDialog, QVBoxLayout, QGraphicsView, QGraphicsScene, QFrame, QSizePolicy, QGraphicsPixmapItem, QApplication, QRubberBand
_ui = {}
_ui['images_default'] = [
('a', r'imgA.png', QPointF(0, -200)),
('b', r'imgB.png', QPointF(0, -300)),
('c', r'imgC.png', QPointF(0, -400))
]
_ui['images_pressed'] = [
('a', r"imgD.png", QPointF(0, -200)),
('b', r"imgE.png", QPointF(0, -300)),
('c', r'imgF.png', QPointF(0, -400))
]
class MainWindow(QDialog):
def __init__(self, parent=None):
QDialog.__init__(self)
self.window = 'riga_gui'
self.title = 'Character GUI'
self.size = (1000, 650)
self.create()
def create(self):
self.setWindowTitle(self.title)
self.resize(QSize(*self.size))
self.graphicsWidget = MainGraphicsWidget(self)
self.mainLayout = QVBoxLayout()
self.mainLayout.addWidget(self.graphicsWidget)
self.setLayout(self.mainLayout)
class MainGraphicsWidget(QGraphicsView):
def __init__(self, parent=None):
super(MainGraphicsWidget, self).__init__(parent)
self._scene = QGraphicsScene(backgroundBrush=Qt.gray)
self.setScene(self._scene)
for name, path, position in _ui['images_default']:
_ui[name + '_buttonItem'] = QGraphicsPixmapItem(QPixmap(path))
self._scene.addItem(_ui[name + '_buttonItem'])
_ui[name + '_buttonItem'].setPos(position)
self.setTransformationAnchor(QGraphicsView.AnchorUnderMouse)
self.setResizeAnchor(QGraphicsView.AnchorUnderMouse)
self.setVerticalScrollBarPolicy(Qt.ScrollBarAlwaysOff)
self.setHorizontalScrollBarPolicy(Qt.ScrollBarAlwaysOff)
self.setBackgroundBrush(QBrush(QColor(30, 30, 30)))
self.setFrameShape(QFrame.NoFrame)
self.setSizePolicy(QSizePolicy(QSizePolicy.Expanding, QSizePolicy.Expanding))
def mouseMoveEvent(self, event):
modifierPressed = QApplication.keyboardModifiers( )
if (modifierPressed & Qt.AltModifier) == Qt.AltModifier and event.button( ) == Qt.RightButton:
print('Alt+RightClick')
print(event.button( ))
elif (modifierPressed & Qt.AltModifier) == Qt.AltModifier:
print('Alt')
super(MainGraphicsWidget, self).mouseMoveEvent(event)
if __name__ == '__main__':
import sys
app = QApplication(sys.argv)
window = MainWindow( )
window.setGeometry(500, 300, 800, 600)
window.show( )
sys.exit(app.exec_( ))