0

画像表示に Matplotlib を使用して Python で QT4 Traits-GUI に取り組んでいますが、これまでのところ、このエディターを変更してツールバーを含めようとしています。

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 の 2 番目の引数は何でしょうか? ツールバーを QWidget として Figure に追加する際に見つけた例に従おうとしていますが、これらはすべて、Traits Editor ではなく、QMainWindow ベースのクラス内に main_frame を作成します。前もって感謝します。

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 に答える