matplotlib, wxPanel inside a wxPanel
ajaksu
ajaksu at gmail.com
Sat Aug 12 14:07:14 EDT 2006
It seems to work (only tested with embedding_in_wx4.py). I guess it's
something related to things nesting in a slightly wrong way, right
enough to show up but wrong enough to only show up :)
I hope this helps.
Daniel
Substitute embedding_in_wx4.py's CanvasFrame with:
class CanvasFrame(wxFrame):
def __init__(self):
# Begin just like embedding_in_wx4.py
wxFrame.__init__(self,None,-1,
'CanvasFrame',size=(550,350))
self.figure = Figure(figsize=(5,4), dpi=100)
self.axes = self.figure.add_subplot(111)
t = range(0,30)
s = [randint(1, 30)* random() * x for x in t]
self.axes.plot(t,s)
# Add panels from deepest level
self.main_panel = wxPanel(self, -1)
# Parent is main_panel:
self.graph_panel = wxPanel(self.main_panel, -1)
# self.canvas is child of graph_panel...
self.canvas = FigureCanvas(self.graph_panel, -1, self.figure)
# ... as is textgraph
self.text_graph = wxTextCtrl(self.graph_panel, -1, "Hello!\n" +
"I'm in graph_panel",
style=wxTE_MULTILINE)
self.toolbar = MyNavigationToolbar(self.canvas, True)
self.toolbar.Realize()
self.graph_panel_sizer = wxBoxSizer(wxVERTICAL)
tw, th = self.toolbar.GetSizeTuple()
fw, fh = self.canvas.GetSizeTuple()
self.toolbar.SetSize(wxSize(fw, th))
self.graph_panel_sizer.Add(self.toolbar, 0, wxEXPAND)
# After the toolbar, add its siblings to graph_panel_sizer
self.graph_panel_sizer.Add(self.canvas, 1, wxEXPAND)
self.graph_panel_sizer.Add(self.text_graph)
self.graph_panel.SetSizer(self.graph_panel_sizer)
self.graph_panel.Fit()
# graph_panel is done, just add it to main_panel's sizer.
self.main_panel_sizer = wxBoxSizer(wxVERTICAL)
self.text_in = wxTextCtrl(self.main_panel, -1,
"Inside main_panel",
style=wxTE_MULTILINE)
# Here:
self.main_panel_sizer.Add(self.graph_panel,1, wxEXPAND)
self.main_panel_sizer.Add(self.text_in,0, wxEXPAND)
self.main_panel.SetSizer(self.main_panel_sizer)
self.main_panel.Fit()
self.sizer = wxBoxSizer(wxVERTICAL)
self.sizer.Add(self.main_panel, 1, wxEXPAND)
self.sizer_text = wxBoxSizer(wxHORIZONTAL)
self.text_hi = wxTextCtrl(self, -1, "Hello :)",
style=wxTE_MULTILINE)
self.text_out = wxTextCtrl(self, -1,"Outside main_panel",
style=wxTE_MULTILINE|wxEXPAND)
self.sizer_text.Add(self.text_hi, 0, wxEXPAND)
self.sizer_text.Add(self.text_out, 0, wxEXPAND)
self.sizer.Add(self.sizer_text, 0, wxEXPAND)
EVT_PAINT(self, self.OnPaint)
self.toolbar.update()
self.SetSizer(self.sizer)
self.Fit()
def OnPaint(self, event):
self.canvas.draw()
event.Skip()
More information about the Python-list
mailing list