例如,考虑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_ _()来接受一个参数,这不起作用。
感谢您的帮助!
答案 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()
有一个CanvasFrame
和App
不能再被初始化为wx.Frame
(父级和标题硬编码到对象中)可能不是一个好主意,但这是另一个故事