2017-10-14 5 views
1

Ich möchte einfach deaktivieren Mausrad Scrollen auf QScrollArea, um nur durch Klicken auf die rechte Bildlaufleiste nach unten scrollen, aber ich kann keine Lösung im Internet finden.Deaktivieren Mausrad Scroll auf QscrollArea

app = QtGui.QApplication([]) 
sa = pg.QtGui.QScrollArea() 
win = pg.GraphicsWindow()  
sa.setWidget(win) 

Das Problem ist, dass ich eine Menge von Graphen in meinem Scroll-Bereich habe, und wenn ich versuche, auf einem von ihnen Mausrad, wird die Seite nach oben oder nach unten zusammen mit dem Graphen. Ich kann keine Methode finden, um "sa" aufzurufen, um das Mausrad zu deaktivieren.

Ich habe einige Posts gefunden, die über den Installationsereignisfilter diskutieren, aber ich kann nicht verstehen, wie man sie in diesem Fall verwendet. Zum Beispiel habe ich versucht, dies zu verwenden:

aber ich habe wirklich nicht verstanden, welche Argumente übergeben und wie das Ereignis zu überprüfen.

Vielen Dank im Voraus, wenn Sie mir bei diesem Problem helfen können.

Antwort

0

Sie haben die richtige Idee. Die Ereignisfilterung erfordert ein Objekt, das QObject erbt, um nach den relevanten Ereignissen zu suchen. Solche Objekte verfügen über eine eventFilter-Methode, die überschrieben werden kann, um eine benutzerdefinierte Übergabe aller Ereignisse für das überwachte Objekt bereitzustellen. Wenn diese Methode True für ein bestimmtes Ereignis zurückgibt, wird sie nicht weiter verbreitet. Üblicherweise wird das Hauptfenster wird verwendet, um die Ereignisfilterung zu bieten, wie folgt aus:

import sys 
from PyQt4 import QtCore, QtGui 

class Window(QtGui.QWidget): 
    def __init__(self): 
     super(Window, self).__init__() 
     self.scroll = QtGui.QScrollArea() 
     self.widget = QtGui.QGraphicsView() 
     self.widget.setFixedSize(600, 600) 
     self.scroll.setWidget(self.widget) 
     layout = QtGui.QVBoxLayout(self) 
     layout.addWidget(self.scroll) 
     self.scroll.viewport().installEventFilter(self) 

    def eventFilter(self, source, event): 
     if (event.type() == QtCore.QEvent.Wheel and 
      source is self.scroll.viewport()): 
      return True 
     return super(Window, self).eventFilter(source, event) 

if __name__ == '__main__': 

    app = QtGui.QApplication(sys.argv) 
    window = Window() 
    window.setGeometry(600, 100, 400, 300) 
    window.show() 
    sys.exit(app.exec_()) 
+0

Ich schaffte es nur das Problem zu beheben die Schaffung eines Klasse: 'Klasse Auswahlrad (pg.QtGui.QScrollArea): def __init __ (self): pg.QtGui.QScrollArea .__ init __ (self) def wheelEvent (self, ev): wenn ev.type() == QtCore.QEvent.Wheel: ev.ignore() ' dann das Objekt wie folgt erstellen: ' sa = Auswahlrad() ' ich weiß nicht, ob dies der richtige Weg ist, aber ich denke, es ist –

+0

@EdoardoBianchi wirklich einfach. Die Methode, die ich zeigte, ist einfach (nur sechs Zeilen Code). – ekhumoro

0

ich endlich dieses Problem zu beheben geschafft, mit dieser Lösung:

class Scroller(pg.QtGui.QScrollArea): 
    def __init__(self): 
     pg.QtGui.QScrollArea.__init__(self) 
    def wheelEvent(self, ev): 
     if ev.type() == QtCore.QEvent.Wheel: 
      ev.ignore() 

app = QtGui.QApplication([]) 
sa = Scroller() # <====== 
win = pg.GraphicsWindow()  
sa.setWidget(win) 
Verwandte Themen