Wxpython 如何在wx.Notebook panel中为matplotlib FigureCanvas获得正确的布局

Wxpython 如何在wx.Notebook panel中为matplotlib FigureCanvas获得正确的布局,wxpython,matplotlib,wxnotebook,Wxpython,Matplotlib,Wxnotebook,我已经为此挣扎了几天了。如果我不使用wx.Notebook,我可以让FigureCanvas在一个尺寸测量器中正确地调整尺寸,但是一旦我将FigureCanvas放置在wx.Notebook面板中,绘图似乎忽略了面板尺寸测量器。它也有一些刷新问题,如果你把它从屏幕上拉下来再打开,绘图就消失了。也许命令的顺序有问题,但我似乎找不到。这篇文章:帮助我走到了这一步,但我似乎不明白为什么一旦我在wx笔记本中使用它,情节会有不同的表现 以下是它第一次显示时的外观: 这是在我把屏幕拉到一半之后: 改变 到

我已经为此挣扎了几天了。如果我不使用wx.Notebook,我可以让FigureCanvas在一个尺寸测量器中正确地调整尺寸,但是一旦我将FigureCanvas放置在wx.Notebook面板中,绘图似乎忽略了面板尺寸测量器。它也有一些刷新问题,如果你把它从屏幕上拉下来再打开,绘图就消失了。也许命令的顺序有问题,但我似乎找不到。这篇文章:帮助我走到了这一步,但我似乎不明白为什么一旦我在wx笔记本中使用它,情节会有不同的表现

以下是它第一次显示时的外观:

这是在我把屏幕拉到一半之后:

改变

#!/usr/bin/env python
import wx
from matplotlib.backends.backend_wxagg import FigureCanvasWxAgg as FigureCanvas
from matplotlib.figure import Figure

class MyFrame(wx.Frame):
    def __init__(self, parent):
        wx.Frame.__init__(self,
                          parent,
                          id=wx.ID_ANY,
                          pos=wx.DefaultPosition,
                          size=wx.Size( -1,-1 ),
                          style=wx.DEFAULT_FRAME_STYLE|wx.TAB_TRAVERSAL)

        fgSizer8 = wx.FlexGridSizer(0, 1, 0, 0)
        self.m_notebook2 = wx.Notebook(self,
                                       wx.ID_ANY,
                                       wx.DefaultPosition,
                                       wx.DefaultSize,
                                       0)

        self.m_panel8 = wx.Panel(self.m_notebook2,
                                 wx.ID_ANY,
                                 wx.DefaultPosition,
                                 wx.DefaultSize,
                                 wx.TAB_TRAVERSAL)

        bSizer20 = wx.BoxSizer(wx.VERTICAL)

        self.fig = Figure()
        self.axes = self.fig.add_subplot(111)
        self.pts = self.axes.plot([1, 2, 3], [4, 5, 7], 'ro-', picker=5)
        self.canvas = FigureCanvas(self, -1, self.fig)

        bSizer20.Add(self.canvas, 1, wx.ALL|wx.EXPAND, 5)

        self.m_panel8.SetSizer(bSizer20)
        self.m_panel8.Layout()
        bSizer20.Fit(self.m_panel8)
        self.m_notebook2.AddPage(self.m_panel8, u"a page", False)

        fgSizer8.Add(self.m_notebook2, 1, wx.EXPAND |wx.ALL, 5)

        self.SetSizer(fgSizer8)
        self.Layout()
        fgSizer8.Fit(self)

        self.Centre(wx.BOTH)

if __name__ == "__main__":
    app = wx.App(0)
    frame = MyFrame(None)
    frame.Show()
    app.MainLoop()
self.canvas = FigureCanvas(self, -1, self.fig)
self.canvas = FigureCanvas(self.m_panel8, -1, self.fig)