2010-06-23 2 views
3

을 확장 얻기 나는 같은 단일 항목을 포함하는 wxPython에 프레임이 :이 일을 포함한 여러 패널을 포함하는 프레임을wxPython에 패널 항목

class Panel(wx.Panel): 
    def __init__(self, parent): 
     wx.Panel.__init__(self, parent) 
     self.text = wx.StaticText(self, label='Panel 1') 

를하고, 치수 선별기에 의해 지배된다. StaticText을 확장하고 싶습니다. BoxSizer에 텍스트가 포함되어 있고 wx.EXPAND 플래그를 설정하면 트릭을 적용하지만 한 항목에 대해서만 크기 조정기를 사용하는 것은 바보 같습니다.

더 간단한 해결책이 있습니까?

는 (난 그냥 직접 부모 프레임의 사이 저에 StaticText을 추가 할 수 있지만, 내 디자인을 위해 직접 프레임으로 시작하는 더 의미가 있습니다.)


난 그냥 실현하는 BoxSizer과를 만들 때 하나 개의 항목은 wx.VERTICAL 작동하지 않습니다 : 물론

class Panel1(wx.Panel): 
    def __init__(self, parent): 
     wx.Panel.__init__(self, parent) 
     self.BackgroundColour = 'red' 
     sizer = wx.BoxSizer(wx.VERTICAL) 
     self.Sizer = sizer 
     self.list = wx.ListBox(self, choices=[str(i) for i in xrange(100)]) 
     sizer.Add(self.list, 0, wx.EXPAND) 
     sizer.Fit(self) 

내가 수직 나중에 항목을 추가하고 여전히 (둘 다 확장하게 할 경우 무엇을 하나 개의 항목으로 확인하지만 예를 들어 사용자의 윈도우가 확장 될 때)?

편집 : 아, 방금 boxsizers를 두 가지 방법으로 성장 시키려면 그 비율을 사용해야한다는 것을 알았습니다. (BoxSizer.Add 님의 전화에서 0을 1로 바꾸십시오.)

답변

6

wx.Frame은 자식이 하나만있는 경우 자동으로 수행합니다. 그러나 wx.Panel은이 작업을 자동으로 수행하지 않습니다. 사이 타 (sizer)를 사용하여 붙어 있습니다. 내가 추가 보너스로 거기에 패딩 속성을 던졌다

def expanded(widget, padding=0): 
    sizer = wx.BoxSizer(wx.VERTICAL) 
    sizer.Add(widget, 1, wx.EXPAND|wx.ALL, padding) 
    return sizer 

class Panel(wx.Panel): 
    def __init__(self, parent): 
     wx.Panel.__init__(self, parent) 
     self.text = wx.StaticText(self, label='Panel 1') 
     self.SetSizer(expanded(self.text)) 

: 당신은 자신이 그것을 많이하고 찾아내는 경우에, 단지 편의 기능을합니다. 그것을 사용하거나 버리십시오.

+0

감사합니다. 내 편집과 관련하여 어떤 생각이 드나요? –

+0

그래, 비율은 sizer의 방향으로 자랍니다. wx.EXPAND는 다른 방향을 채우기 위해 확장합니다. 둘 다 사용하여 양방향으로 성장하십시오. – FogleBird