我可以通过单击wxpython程序中的按钮来创建两个窗口吗?

时间:2014-10-20 18:27:03

标签: wxpython

我试过这样做,但这没有帮助。它说MainFrame没有属性onButton1.为什么它说???我该如何解决?

此外,我不明白在wxpython中使用sizer。使用sizer的基础是什么?

如果我很快或短暂地得到答案,它会给我很多帮助。

class MainFrame(wx.Frame): 
   def __init__(self): 
       wx.Frame.__init__(self, None, wx.NewId(), "Main") 
       self.sizer = wx.BoxSizer(wx.VERTICAL)


       self.button = wx.Button(self, wx.NewId(), "Open a window")
       self.button1 = wx.Button(self, wx.NewId(), "Open another window")
       self.sizer.Add(self.button, proportion=0, border=2, flag=wx.ALL)
       self.SetSizer(self.sizer)
       self.sizer.Add(self.button1, proportion=2, border=4, flag=wx.ALL)
       self.SetSizer(self.sizer)

       self.Bind(wx.EVT_BUTTON, self.onButton,self.button)
       self.Bind(wx.EVT_BUTTON, self.onButton1, self.button1)

       self.Layout()

   def onButton(self, evt):
       frame = NewFrame2(self)
       frame.Show(True)
       frame.MakeModal(True)

class NewFrame2(wx.Frame): 
   def __init__(self, parent): 
       wx.Frame.__init__(self, parent, wx.NewId(), "Child") 
       panel=wx.Panel(self)

   def onButton1(self, evt):
       frame = NewFrame(self)
       frame.Show(True)
       frame.MakeModal(True)


class NewFrame(wx.Frame): 
   def __init__(self, parent): 
       wx.Frame.__init__(self, parent, wx.NewId(), "Window")
       panel=wx.Panel(self)


class MyApp(wx.App):
   def OnInit(self):
       frame = MainFrame()
       frame.Show(True)
       self.SetTopWindow(frame)
       return True

app = MyApp(0)
app.MainLoop()  

1 个答案:

答案 0 :(得分:0)

您需要在onButton1类中定义MainFrame,就像使用onButton方法一样。由于它是在NewFrame2中定义的,因此该方法超出了范围,无法从MainFrame类中绑定。