2017-04-10 4 views
1

이 질문에 대한 대답은 here입니다. 마우스가 플롯 위에있을 때 휠 스크롤 이벤트를 스크롤 막대에 전달하는 방법이 있습니까? Main Widget에서 이벤트 필터를 사용해 보았습니다 만, 휠이 Main에서 스크롤되는 것을 캔버스/플롯에서만 등록한 것은 아닙니다. 플롯에서 스크롤되는 것을 알 필요가 없으며 GUI 만 있습니다. 어떤 도움이라도 대단히 감사하겠습니다. 감사합니다.pyqt4 scrollArea 이벤트 및 matplotlib wheelEvent

답변

0

한 용액에 PyQt는 QScrollArea은 이제하기 matplotlib "scroll_event" (Event handling tutorial를 참조) QScrollArea 스크롤바의 스크롤 기능에 연결 사용되는 FigureCanvas 내부 스크롤.

(내에서 대답 this question까지)은 예를 스크롤 값의 갱신이 함수 내부

self.canvas.mpl_connect("scroll_event", self.scrolling) 

통해 기능 scrolling에 연결하기 위해 확장 될 수있다.

import matplotlib.pyplot as plt 
from PyQt4 import QtGui 
from matplotlib.backends.backend_qt4agg import FigureCanvasQTAgg as FigureCanvas 
from matplotlib.backends.backend_qt4agg import NavigationToolbar2QT as NavigationToolbar 

class ScrollableWindow(QtGui.QMainWindow): 
    def __init__(self, fig): 
     self.qapp = QtGui.QApplication([]) 

     QtGui.QMainWindow.__init__(self) 
     self.widget = QtGui.QWidget() 
     self.setCentralWidget(self.widget) 
     self.widget.setLayout(QtGui.QVBoxLayout()) 
     self.widget.layout().setContentsMargins(0,0,0,0) 
     self.widget.layout().setSpacing(0) 

     self.fig = fig 
     self.canvas = FigureCanvas(self.fig) 
     self.canvas.draw() 
     self.scroll = QtGui.QScrollArea(self.widget) 
     self.scroll.setWidget(self.canvas) 

     self.nav = NavigationToolbar(self.canvas, self.widget) 
     self.widget.layout().addWidget(self.nav) 
     self.widget.layout().addWidget(self.scroll) 

     self.canvas.mpl_connect("scroll_event", self.scrolling) 

     self.show() 
     exit(self.qapp.exec_()) 

    def scrolling(self, event): 
     val = self.scroll.verticalScrollBar().value() 
     if event.button =="down": 
      self.scroll.verticalScrollBar().setValue(val+100) 
     else: 
      self.scroll.verticalScrollBar().setValue(val-100) 


# create a figure and some subplots 
fig, axes = plt.subplots(ncols=4, nrows=5, figsize=(16,16)) 
for ax in axes.flatten(): 
    ax.plot([2,3,5,1]) 

# pass the figure to the custom window 
a = ScrollableWindow(fig) 
+0

고맙습니다. 몇 가지 해결 방법을 찾아야했지만 솔루션과 원하는 기능을 그대로 유지했습니다. – ntmt