2013-08-27 28 views
0

我工作的一个QT4性状的图形用户界面在使用Python Matplotlib图像显示,到目前为止,我有企图包括工具栏修改this编辑器创建Matplotlib工具栏。在Python性状编辑

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添加到数字中的示例,但这些都在基于QMainWindow的类中创建main_frame,而不是Traits编辑器。提前致谢。

回答

0

找到了答案。由于parentQGridLayout本身,我们可以在第2行中直接添加工具栏小部件的布局,列1(将其放置在画布上,我相信这是添加在视图编辑器创建一个widget下文)。

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 

图像缩放/平移似乎有点慢,但这可能是另一个问题。