在wxFrame中绘图,如何传递参数?

时间:2014-08-12 05:41:58

标签: python matplotlib wxpython

例如,考虑http://matplotlib.org/examples/user_interfaces/embedding_in_wx4.html中的代码。但是,我需要传递振幅作为参数,我该怎么做?如果修改App类声明,如

class App(wx.App):
    def __init__(self,amplitude):
        wx.App.__init__(self)
        self.arg=amplitude
    def OnInit(self):
        '''Create the main window and insert the custom frame'''
        frame = CanvasFrame(self.arg)
        frame.Show(True)

        return True

如果我修改CanvasFrame .__ init_ _()来接受一个参数,这不起作用。

感谢您的帮助!

1 个答案:

答案 0 :(得分:1)

我不明白为什么传递给CanvasFrame的参数不起作用。链接的mpl wx4演示修改如下,它工作: EDIT II :您的错误是交换wx.App.__init__(self)self.args = amplitude。在您的情况下self.args在调用App.OnInit(…)时尚未设置。

class CanvasFrame(wx.Frame):    
    def __init__(self, amplitude):
        wx.Frame.__init__(self, None, -1, …
        …
        self.amplitude = amplitude
        …
        # now use the amplitude
        s = sin(2*pi*t) * self.amplitude

在派生App中:

class App(wx.App):
    def __init__(self, amplitude):
        self.amplitude = amplitude
        wx.App.__init__(self)

    def OnInit(self):
        'Create the main window and insert the custom frame'
        frame = CanvasFrame(self.amplitude)
        frame.Show(True)

        return True

amplitude = 16
app = App(amplitude)
app.MainLoop()

有一个CanvasFrameApp不能再被初始化为wx.Frame(父级和标题硬编码到对象中)可能不是一个好主意,但这是另一个故事

编辑:完全符合OP问题的扩展示例(从顶层向内传递的论点。)