패널이 다른 WX.Sizer 내에서 패널이 확장 될 때 WX.Panel의 WX.Sizer를 어떻게 확장합니까?

StackOverflow https://stackoverflow.com/questions/611592

  •  03-07-2019
  •  | 
  •  

문제

나는 그것과 관련된 그리드 백사이저가있는 wx.panel을 가지고 있습니다. 이 패널은 다른 Sizer (Boxsizer) 내부에 배치되며, Add는 확장 플래그가 있습니다. 즉, 패널이 Sizer의 전체 너비를 차지합니다. ...하지만 패널의 내부 시거는 지금 패널을 채우지 않습니다.

컴포넌트를 추가 할 때 내부 Sizer의 플래그를 wx.expand | wx.all로 설정하려고 시도했지만 작동하지 않았습니다. 패널이 확장 될 때 패널과 같은 너비를 유지하는 방법을 아는 사람이 있습니까?

편집 : 그리드 백사이저가 포함 된 패널을 만드는 코드 :

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
도움이 되었습니까?

해결책

여기서 당신이하는 모든 일은 합리적으로 보입니다. AddrowableCol () 호출이 누락 된 것 같습니다.

    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)

다른 팁

당신은 올바른 아이디어를 가지고 있습니다. 코드를 게시하면 (일부 자리 표시 자만, 배경 색상이나 무언가가 다른 일을 볼 수 있도록) 진단하기가 더 쉬울 것입니다. 내부 패널의 부모가 올바르게 설정되어 있는지 확인하고 Sizer 힌트를 시도 할 수 있습니다. Gridbagsizer.setSizeHints (InnerPanel)가 도움이되는지 확인하십시오.

이를 수행하는 또 다른 가능한 방법은 Box Sizer입니다.

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

두 가지 방법이 효과가있었습니다! 감사 :)

라이센스 : CC-BY-SA ~와 함께 속성
제휴하지 않습니다 StackOverflow
scroll top