0

wx.Frame(またはwx.Panel)のMatplotlibFigureキャンバスでMatplotlibNavigationToolbar2Wxを使用して、この動作が断続的に発生しました。ズームアイコンまたはパンアイコンが選択されている場合、アイコンは消えますが、空いているスペースをクリックするとツールが切り替わります。ホーム、戻るステップ、または進むステップのアイコンはすべて期待どおりに動作します。

誰かが1.それを引き起こす原因と2.それを修正する方法についてアドバイスを提供できますか?

ツールバーを含むようにわずかに変更された初期コードを投稿してくれたjoaquinに感謝します。(http://stackoverflow.com/questions/10737459/embedding-a-matplotlib-figure-inside-a-wxpython-panel)

私はpython2.6、wxPython 2.9.2.4 osx-carbon(クラシック)およびMatplotlib1.1.0を使用しています

ありがとう

以下のコードは問題を示しています。

    #!/usr/bin/env python
    # encoding: UTF-8
    """
    wxPython and Matplotlib Canvas with Matplotlib Toolbar.py

    """
    from numpy import arange, sin, pi
    import matplotlib
    matplotlib.use('WXAgg')

    from matplotlib.backends.backend_wxagg import FigureCanvasWxAgg as FigureCanvas
    from matplotlib.backends.backend_wx import NavigationToolbar2Wx
    from matplotlib.figure import Figure

    import wx

    class CanvasPanel(wx.Panel):
        def __init__(self, parent):
            wx.Panel.__init__(self, parent)
            self.figure = Figure()
            self.axes = self.figure.add_subplot(111)
            self.canvas = FigureCanvas(self, -1, self.figure)
            # Add Matplotlib Toolbar
            # Add the Matplotlib Navigation toolBar here
            self.toolbar=NavigationToolbar2Wx(self.canvas)
            self.toolbar.AddLabelTool(5,'',wx.ArtProvider.GetBitmap(wx.ART_FILE_OPEN, wx.ART_TOOLBAR, (32,32)))
            #self.Bind(wx.EVT_TOOL, self.NewTitle(), id=5)
            self.toolbar.Realize()      

            # Add to Box Sizer
            self.sizer = wx.BoxSizer(wx.VERTICAL)
            self.sizer.Add(self.toolbar, 0, wx.LEFT | wx.TOP | wx.GROW)
            self.sizer.Add(self.canvas, 1, wx.LEFT | wx.TOP | wx.GROW)
            self.SetSizer(self.sizer)
            self.Fit()

        def draw(self):
            t = arange(0.0, 3.0, 0.01)
            s = sin(2 * pi * t)
            self.axes.plot(t, s)


    if __name__ == "__main__":
        app = wx.PySimpleApp()
        fr = wx.Frame(None, title='test',size=(800,600))
        panel = CanvasPanel(fr)
        panel.draw()
        fr.Show()
        app.MainLoop()
4

1 に答える 1

0

この特定の問題の原因についてコメントすることはできませんが、wxpython 2.9 でも非 Agg バックエンドで問題が発生していました (コードは 2.8 で問題なく動作していました)。ツールバーを Agg バージョンに置き換えると、このような問題が解決されました。例えば:

from matplotlib.backends.backend_wx import NavigationToolbar2Wx

==>

from matplotlib.backends.backend_wxagg import NavigationToolbar2WxAgg

それに応じてコードを調整します。

self.toolbar=NavigationToolbar2Wx(self.canvas)

==>

self.toolbar = NavigationToolbar2WxAgg(self.canvas)

hth、vbr

于 2012-08-04T14:29:08.463 に答える