0

我正在使用 Python 中的 QT4 Traits-GUI 使用 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 添加到图形时找到的示例,但是这些都在基于 QMainWindow 的类中创建了 main_frame,而不是 Traits Editor。提前致谢。

4

1 回答 1

0

找到了答案。由于parent它本身就是一个QGridLayout,我们可以将工具栏小部件直接添加到第 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

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

于 2013-08-28T14:42:26.380 回答