I am trying to make zoom in/out, but not only with wheelEvent. I want to use mouseMoveEvent and make zooming something like in 3d softwares(Maya), when (Alt+Right Mouse) button pressed and mouse being moved down/up or left/right, it will zoom in/out. So I thought to take coordinates of event.pos(), but I don't need zooming happening unless it's right mouse button clicked. So I tried to do :
def mouseMoveEvent(self, event):
modifierPressed = QApplication.keyboardModifiers( )
if (modifierPressed & Qt.AltModifier) == Qt.AltModifier and event.button( ) == Qt.RightButton:
print('Alt+RightClick')
print(event.pos( ))
But, I noticed that event.button() always returns NoButton. Why is it happening ? Will put below full code , if somebody wants to try to run it, but code requires images.
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_( ))