2017-10-14 18 views
1

QScrollAreaでマウスホイールのスクロールを無効にして、右のスクロールバーをクリックしてスクロールするだけですが、インターネット上で解決策を見つけることはできません。QscrollAreaでマウスホイールのスクロールを無効にする

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

問題は、私は私のスクロール領域にグラフをたくさん持っている、と私はそれらのいずれかにマウスホイールしようとすると、ページがグラフと一緒に上下にスクロールすることです。 マウスホイールのスクロールを無効にするために "sa"を呼び出すメソッドが見つかりません。

インストールイベントフィルタについて議論している記事がいくつか見つかりましたが、この場合の使用方法はわかりません。たとえば、私はこれを使用しようとしました:

sa.viewport().installEventFilter(???) 

しかし、私は本当にどの引数を渡し、どのようにイベントをチェックするのか分かりませんでした。

この問題を解決するお手伝いをしていただきありがとうございます。

答えて

0

あなたは正しい考えがあります。イベントフィルタリングには、関連するイベントを監視するためにQObjectを継承するオブジェクトが必要です。このようなオブジェクトは、監視オブジェクトのすべてのイベントのカスタムハンドリングを提供するためにオーバーライドすることができるeventFilterメソッドを持っています。このメソッドが特定のイベントに対してTrueを返した場合、それ以上は伝搬されません。通常、メイン・ウィンドウは、イベントのフィルタリングを提供するために使用され、次のように:

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

私はちょうど作成問題を解決するために管理しましたクラス: 'クラススクローラ(pg.QtGui.QScrollArea): デフ__init __(自己): pg.QtGui.QScrollArea .__のinit __(自己) デフwheelEvent(自己、EV): (ev.type場合) == QtCore.QEvent.Wheel: ev.ignore() 'そして、このようなオブジェクトを作成 : ' SA =スクローラ() ' これが最も正しい方法であれば、私は知らないが、私はそれが –

+0

@EdoardoBianchi本当に簡単だと思います。私が示した方法は単なるシンプルなコードです(6行のみ)。 – ekhumoro

0

私は最終的にこのソリューションを使用して、この問題を解決するために管理:

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) 
関連する問題