2011-05-11 3 views
2

코드의 메인 라인에서 호출 할 프레임 클래스의 sizer에 패널 클래스를 추가하고 싶습니다.wxpython 패널 클래스를 사이 저에 추가

오류는 TypeError: wx.Window, wx.Sizer, wx.Size, or (w,h) expected for item입니다. 이것은 이것이 패널 클래스이고 패널 클래스의 인스턴스가 아니라는 사실과 관련이 있다고 가정합니다.

어느 쪽이든, 어떻게 그런 짓을할까요?

코드는 다음과 같습니다 :

#!/usr/bin/python 
# -*- coding: utf-8 -*- 

import wx 

class step_1(wx.Panel): 
    def __init__(self, parent): 
     wx.Panel.__init__(self, parent, id=wx.ID_ANY) 

     sizer = wx.BoxSizer(wx.VERTICAL) 
     txtOne = wx.TextCtrl(self, wx.ID_ANY, "") 

     sizer = wx.BoxSizer(wx.VERTICAL) 
     sizer.Add(txtOne, 0, wx.ALL, 5) 

     self.SetSizer(sizer) 

class step_2(wx.Panel): 
    def __init__(self, parent): 
     wx.Panel.__init__(self, parent, id=wx.ID_ANY) 

     sizer = wx.BoxSizer(wx.VERTICAL) 
     txtOne = wx.TextCtrl(self, wx.ID_ANY, "") 

     sizer = wx.BoxSizer(wx.VERTICAL) 
     sizer.Add(txtOne, 0, wx.ALL, 5) 

     self.SetSizer(sizer) 

class main_frame(wx.Frame): 
    """Main Frame holding the main panel.""" 
    def __init__(self,*args,**kwargs): 
     wx.Frame.__init__(self,*args,**kwargs) 
     p = wx.Panel(self) 
     sizer = wx.BoxSizer(wx.VERTICAL) 
     sizer.Add(step_1,0,border = 5) 
     sizer.Add(step_2,0,border = 5) 
     p.SetSizerAndFit(sizer) 
     self.Show() 

if __name__ == "__main__": 
    app = wx.App(False) 
    frame = main_frame(None,-1,size = (400,300)) 
    app.MainLoop() 

답변

3

당신이 자신을 말했듯이 : 당신은 물론 당신이 있어야 선별기,에 step_1step_2 클래스의 인스턴스를 통과 아닙니다. 간단히 인스턴스를 작성하십시오.

class main_frame(wx.Frame): 
    """Main Frame holding the main panel.""" 
    def __init__(self,*args,**kwargs): 
     wx.Frame.__init__(self,*args,**kwargs) 
     p = wx.Panel(self) 

     stp1 = step_1(p) 
     stp2 = step_2(p) 

     sizer = wx.BoxSizer(wx.VERTICAL) 
     sizer.Add(stp1, 0, border = 5) 
     sizer.Add(stp2, 0, border = 5) 
     p.SetSizerAndFit(sizer) 
     self.Show() 
+0

어긋나 기 쉽습니다. 감사! 나는 그걸 알아야한다고 생각합니다 .... –