【问题标题】:Matplotlib ToolBar Icons disappear when selected in wxPython Panel在 wxPython 面板中选择时,Matplotlib 工具栏图标消失
【发布时间】:2012-07-31 05:50:24
【问题描述】:

我在 wx.Frame(或 wx.Panel)的 Matplotlib Figure 画布中使用 Matplotlib NavigationToolbar2Wx 间歇性地遇到了这种行为。如果选择了缩放图标或平移图标,图标会消失,但在空白处单击仍会切换工具。 Home、Backward 步骤或 Forward 步骤的图标都按预期运行。

谁能提供关于 1. 是什么原因和 2. 如何解决它的建议?

感谢 joaquin 发布稍作修改以包含工具栏的初始代码。 (http://stackoverflow.com/questions/10737459/embedding-a-matplotlib-figure-inside-a-wxpython-panel)

我正在使用 python 2.6、wxPython 2.9.2.4 osx-carbon(经典)和 Matplotlib 1.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()

【问题讨论】:

    标签: matplotlib wxpython toolbar


    【解决方案1】:

    我无法评论这个特定问题的原因, 但我在使用 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

    【讨论】:

    • 我尝试同时使用 NavigationToolbar2Wx 和 NavigationToolbar2WxAgg,结果相同,缩放和平移的图标消失了。我发现了另一个类似的问题,其中 NavigationToolbar2 被隐藏,并且使用相同的调用构造了一个新工具栏,这在框架中设置工具栏时似乎可以工作。我还没有尝试将它放在图形画布中,看看它是否有效。
    • 看起来问题是由于向 NavigationToolbar2Wx 工具栏添加了新的位图按钮。如果我删除添加的工具,问题就会消失。我想我必须使用其他工具创建另一个工具栏
    猜你喜欢
    • 1970-01-01
    • 2012-05-31
    • 2019-03-23
    • 2015-08-07
    • 1970-01-01
    • 2014-01-09
    • 2012-05-21
    • 1970-01-01
    相关资源
    最近更新 更多