Como faço para expandir um wx.sizer de um wx.panel quando o painel é expandido dentro de outro wx.sizer?
Pergunta
Eu tenho um wx.Panel que tem um GridBagSizer associado a ele. Este painel é colocado dentro de outro Sizer (BoxSizer), cuja add tem a bandeira expandir - o que significa que o painel ocupa toda a largura do sizer, o que é ótimo. ... Mas sizer interna do painel não preencher o painel agora.
Eu tentei definindo a bandeira do calibrador interno para wx.Expand | wx.ALL quando eu adicioná-lo de componentes, mas que não funcionou. Alguém sabe como se certificar que as estadias sizer a mesma largura como do painel quando o painel é expandido?
Editar: Meu código que cria o painel contendo o 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
Solução
Tudo o que você está fazendo aqui parece razoável. Eu acho que você está perdendo uma chamada AddGrowableCol ().
sizer.Add(b, wx.GBPosition(0,0))
sizer.Add(l1, wx.GBPosition(0,1), flag=wx.EXPAND)
sizer.AddGrowableCol(1)
Eu, pessoalmente, tive mais sorte com um FlexGridSizer em vez de um GridBagSizer:
fgs = wx.FlexGridSizer(gridRows[fields], 2, 0, 0)
fgs.AddGrowableCol(1)
fgs.Add(wx.StaticText(self, -1, "Contact Phone"), 0, wx.ALL, border)
Outras dicas
Você tem a idéia certa. Se você postar algum código, (apenas alguns espaços reservados, com diferentes cores de fundo ou algo para que possamos ver o que está acontecendo) será mais fácil de diagnosticar. Certifique-se de que o pai do Painel interno está configurado corretamente, e você pode tentar algumas dicas sizer:. Gridbagsizer.SetSizeHints (innerPanel) e ver se isso ajuda
Outra maneira possível de fazer isso é com uma caixa Sizer:
sizer = wx.BoxSizer(wx.HORIZONTAL)
sizer.Add(item1)
sizer.Add(item2, proportion=1, flag=wx.EXPAND)
Ambas as formas funcionou! Thanks:)