2009-11-23 3 views
1

일부 데이터가 들어있는 네 개의 상자가있는 패널을 만들려고합니다. 이 네 개의 상자에는 미리 정의 된 정적 크기가 있어야합니다. 내가 지금까지 가지고있는 것은 네 개의 상자가 어느 정도 겹치고 있다는 것입니다.wxPython. 4 개의 정적 크기 상자가있는 패널 만들기

아이디어가 있으십니까?

코드 :

import wx 

class MyFrame(wx.Frame): 
    def __init__(self, *args, **kwargs): 
     wx.Frame.__init__(self, *args, **kwargs) 

     self.pl = wx.Panel(self) 
     self.SetSize((500, 350)) 

     sb = wx.StaticBox(self.pl, -1, 'BOX0', size=(180, 150)) 
     sat = wx.CheckBox(self.pl, -1, 'Satellite') 
     gsm = wx.CheckBox(self.pl, -1, 'GSM') 
     wlan = wx.CheckBox(self.pl, -1, 'WLAN') 

     sb2 = wx.StaticBox(self.pl, -1, 'BOX1', size=(180, 150)) 
     nm2 = wx.StaticText(self.pl, -1, 'default1') 

     sb3 = wx.StaticBox(self.pl, -1, 'BOX2', size=(180, 150)) 
     nm3 = wx.StaticText(self.pl, -1, 'default2') 

     sb4 = wx.StaticBox(self.pl, -1, 'BOX3', size=(180, 150)) 
     nm4 = wx.StaticText(self.pl, -1, 'default3') 

     box = wx.StaticBoxSizer(sb, wx.VERTICAL) 
     box.Add(sat, 0, wx.ALL, 5) 
     box.Add(gsm, 0, wx.ALL, 5) 
     box.Add(wlan, 0, wx.ALL, 5) 

     box2 = wx.StaticBoxSizer(sb2) 
     box2.Add(nm2, 0, wx.ALL, 5) 

     box3 = wx.StaticBoxSizer(sb3) 
     box3.Add(nm3, 0, wx.ALL, 5) 

     box4 = wx.StaticBoxSizer(sb4) 
     box4.Add(nm4, 0, wx.ALL, 5) 

     gs = wx.BoxSizer(wx.HORIZONTAL) 
     gs.Add(box) 
     gs.Add(box2) 

     gss = wx.BoxSizer(wx.HORIZONTAL) 
     gss.Add(box3) 
     gss.Add(box4) 

     gt = wx.BoxSizer(wx.VERTICAL) 
     gt.Add(gs) 
     gt.Add(gss) 

     self.pl.SetSizer(gt) 

class MyApp(wx.App): 
    def OnInit(self): 
     frame = MyFrame(None, -1, '08_gridsizer.py') 
     frame.Show() 
     self.SetTopWindow(frame) 
     return 1 

if __name__ == "__main__": 
    app = MyApp(0) 
    app.MainLoop() 

답변

1

난 그냥 내 자신의 질문에 대답합니다.

해결 방법은 wx.Sizer.SetMinSize()를 각 wx.StaticBoxSizer()에 추가하는 것입니다.

sb = wx.StaticBox(self.pl, -1, 'BOX0') 
sat = wx.CheckBox(self.pl, -1, 'Satellite') 
gsm = wx.CheckBox(self.pl, -1, 'GSM') 
wlan = wx.CheckBox(self.pl, -1, 'WLAN') 

box = wx.StaticBoxSizer(sb, wx.VERTICAL) 
box.SetMinSize((180, 150)) 
box.Add(sat, 0, wx.ALL, 5) 
box.Add(gsm, 0, wx.ALL, 5) 
box.Add(wlan, 0, wx.ALL, 5) 

그리고 wx.StaticText에 크기 인수를 제거()