我正在尝试构建具有多窗格结构的多窗格 wxAUI 应用程序。
我有两类由 AuiManager (_mgr) 控制的对象,它们是:1) wx.Grid.CSheet 对象插入窗格内的 AuiNotebook 2) Matplotlib.figure 对象也封装到同一 AuiManager 内的另一个 AuiNotebook 中。
这是定义相应对象的两个类。
class MySheet(sheet.CSheet):
""" A Copy&Paste enabled grid class"""
def __init__(self, parent,NRows,NCols):
sheet.CSheet.__init__(self, parent)
wx.EVT_KEY_DOWN(self, self.OnKey)
self.SetLabelBackgroundColour('#DBD4D4')
self.SetNumberRows(NRows)
self.SetNumberCols(NCols)
self.NRows = NRows
self.NCols = NCols
def selection(self):
MORE CODE HERE
def OnKey(self, event):
MORE CODE HERE
def copy(self):
MORE CODE HERE
def paste(self):
MORE CODE HERE
def delete(self):
MORE CODE HERE
class Plot(wx.Panel):
def __init__(self, parent, id = -1, dpi = None, **kwargs):
wx.Panel.__init__(self, parent, id=id, **kwargs)
self.figure = mpl.figure.Figure(dpi=dpi, figsize=(2,2))
self.canvas = Canvas(self, -1, self.figure)
self.toolbar = Toolbar(self.canvas)
self.toolbar.Realize()
sizer = wx.BoxSizer(wx.VERTICAL)
sizer.Add(self.canvas,1,wx.EXPAND)
sizer.Add(self.toolbar, 0 , wx.LEFT | wx.EXPAND)
self.SetSizer(sizer)
class PlotNotebook(wx.Panel):
def __init__(self, parent, id = -1):
wx.Panel.__init__(self, parent, id=id)
self.nb = wx.aui.AuiNotebook(self)
sizer = wx.BoxSizer()
sizer.Add(self.nb, 1, wx.EXPAND)
self.SetSizer(sizer)
def add(self,name="plot"):
page = Plot(self.nb)
self.nb.AddPage(page,name)
return page.figure
默认情况下,我设置了两个图形和两个网格,其中两列分别对应 X 和 Y 数据。我想将网格中的 X、Y 数据与相应的图形同步,以便在更改这些数据时,图形也会更新。
在创建时,我可以用我的数据内容填充网格和图形,但是在更改事件(例如将新数据粘贴到网格中时)后,我无法更新图形内容。我在更新 figure.canvas.draw() 和 _mgr.Update() 之后尝试过使用,但尽管我没有收到任何错误,但它们似乎不起作用。