2013-08-27 6 views
0

Matplotlib을 사용하여 이미지 디스플레이에 QT4 Traits-GUI를 사용하고 있는데, 지금까지 this 편집기가 툴바를 포함하도록 수정되었습니다.Python Traits Editor에서 Matplotlib 툴바 만들기

from traitsui.qt4.editor import Editor 
from pyface.qt import QtGui, QtCore 
from matplotlib.backends.backend_qt4agg import FigureCanvasQTAgg as FigureCanvas 
from matplotlib.backends.backend_qt4agg import NavigationToolbar2QTAgg as NavigationToolbar 

class _MPLFigureEditor(Editor): 
""" 
Building custom figure editor for displaying matplotlib figures with a qt4-based Traits interface 
""" 
    scrollable = True 

    def init(self, parent): 
     self.control = self._create_canvas(parent) 
     self.set_tooltip() 

    def update_editor(self): 
     pass 

    def _create_canvas(self, parent): 
     mpl_canvas = FigureCanvas(self.value) #self.value is the figure linked to the editor factory 
     mpl_toolbar = NavigationToolbar(mpl_canvas,???) 
     layout = QtGui.QVBoxLayout() 
     layout.addWidget(mpl_toolbar) 
     layout.addWidget(mpl_canvas) 
     return layout 

이 도구 모음을 만들려면 올바른 위치입니까? 이 경우 NavigationToolbar의 두 번째 인수는 무엇입니까? 그림에 QWidgets로 툴바를 추가 할 때 발견 한 예제를 따르려고하지만이 모든 것들은 Traits Editor가 아닌 QMainWindow 기반 클래스 내에서 main_frame을 생성합니다. 미리 감사드립니다.

답변

0

답을 찾았습니다. parentQGridLayout이므로 2 행 1 열의 레이아웃에 툴바 위젯을 직접 추가 할 수 있습니다 (뷰 편집기 작성시 위젯으로 추가 한 캔버스 아래에 배치).

from traitsui.qt4.editor import Editor 
from pyface.qt import QtGui, QtCore 
from matplotlib.backends.backend_qt4agg import FigureCanvasQTAgg as FigureCanvas 
from matplotlib.backends.backend_qt4agg import NavigationToolbar2QTAgg as NavigationToolbar 

class _MPLFigureEditor(Editor): 
""" 
Building custom figure editor for displaying matplotlib figures with a qt4-based Traits interface 
""" 
    scrollable = True 

    def init(self, parent): 
     self.control = self._create_canvas(parent) 
     mpl_toolbar = NavigationToolbar(self.control,None) 
     parent.addWidget(mpl_toolbar,2,1) 
     self.set_tooltip() 
     return 

    def update_editor(self): 
     pass 

    def _create_canvas(self, parent): 
    """ Create the MPL canvas. """ 
     mpl_canvas = FigureCanvas(self.value) 
     return mpl_canvas 

이미지 확대/축소는 약간 느리게 실행되는 것처럼 보이지만, 이는 또 다른 문제 일 수 있습니다.