2009-03-04 1 views
0

GridBagSizer가 연결된 wx.Panel이 있습니다. 이 패널은 다른 Sizer (BoxSizer) 내부에 배치됩니다.이 패널의 추가에는 확장 플래그가 있습니다. 즉, 패널이 sizer의 전체 너비를 차지한다는 의미입니다. ...하지만 패널의 내부 크기 조정기가 지금 패널을 채우지는 않습니다.패널을 다른 wx.sizer 내부로 확장하면 wx.panel의 wx.sizer를 어떻게 확장합니까?

내부 sizer의 플래그를 wx.Expand | wx.ALL로 설정하려고했지만 구성 요소를 추가했지만 작동하지 않습니다. 패널을 확장 할 때 크기 조정 도구가 패널과 동일한 너비를 유지하는 방법을 아는 사람이 있습니까?

편집 : GridBagSizer가 포함 된 패널을 만들어 내 코드 : 당신이 바로 그 생각이있어

def getNewButton(self, bmp1, bmp2, label): 
     panel = wx.Panel(self.frame, -1, pos=(0,0), style=wx.BORDER_THEME) 
     sizer = wx.GridBagSizer(0, 1) 

     #The button 
     b = buttons.GenBitmapToggleButton(panel, wx.ID_ANY, None) 
     self.frame.Bind(wx.EVT_BUTTON, self.OnToggleButton, b) 
     b.Bind(wx.EVT_ENTER_WINDOW, self.OnMouseEnter) 
     b.Bind(wx.EVT_LEAVE_WINDOW, self.OnMouseLeave) 
     mask = wx.Mask(bmp1, wx.BLUE) 
     bmp1.SetMask(mask) 
     b.SetBitmapLabel(bmp1) 
     mask = wx.Mask(bmp2, wx.BLUE) 
     bmp2.SetMask(mask) 
     b.SetBitmapSelected(bmp2) 
     b.SetToggle(False) 
     b.SetInitialSize(size = wx.Size(30, 30)) 
     b.SetBezelWidth(0) 

     #The Label Button 
     l1 = buttons.GenButton(panel, wx.ID_ANY, label, style=wx.BORDER_NONE) 
     self.frame.Bind(wx.EVT_BUTTON, self.OnFlatButton, l1) 
     l1.Bind(wx.EVT_ENTER_WINDOW, self.OnMouseEnter) 
     l1.Bind(wx.EVT_LEAVE_WINDOW, self.OnNonToggleMouseLeave) 

     sizer.Add(b, wx.GBPosition(0,0)) 
     sizer.Add(l1, wx.GBPosition(0,1), flag=wx.EXPAND) 

     panel.SetSizer(sizer) 
     sizer.SetSizeHints(panel) 
     self.buttonsList.append(ImgToggleButtonComponents(b,panel,l1)) 
     return panel 

답변

1

여기에 나오는 모든 것이 합리적인 것처럼 보입니다. AddGrowableCol() 호출이 누락 된 것 같습니다.

sizer.Add(b, wx.GBPosition(0,0)) 
    sizer.Add(l1, wx.GBPosition(0,1), flag=wx.EXPAND) 
    sizer.AddGrowableCol(1) 

내가 개인적으로 대신 GridBagSizer의 FlexGridSizer 더 많은 행운을 했어 :

fgs = wx.FlexGridSizer(gridRows[fields], 2, 0, 0) 
    fgs.AddGrowableCol(1) 

    fgs.Add(wx.StaticText(self, -1, "Contact Phone"), 0, wx.ALL, border) 
0

. 일부 코드 (일부 자리 표시 자, 배경색이 다른 것 등)를 게시하면 어떤 일이 벌어지는 지 확인할 수 있으므로 진단하기가 더 쉽습니다. 내부 패널의 부모가 올바르게 설정되었는지 확인하고 일부 sizer 힌트 (gridbagsizer.SetSizeHints (innerPanel))를 시도해보고 도움이되는지 확인하십시오.

+0

시도 sizerHints,하지만 행운을 어디에 배치, 그래서 실제로 패널을 생성하고 그것의 sizer 메서드를 게시 – Fry

0

이 작업을 수행하는 또 다른 가능한 방법을 상자 크기 조절기 함께 :

sizer = wx.BoxSizer(wx.HORIZONTAL) 
sizer.Add(item1) 
sizer.Add(item2, proportion=1, flag=wx.EXPAND) 

두 가지 방법 일했다! 고마워요 :)

관련 문제