Come faccio ad espandere un wx.sizer di un wx.panel quando il pannello viene espanso all'interno di un altro wx.sizer?
Domanda
Ho un wx.Panel a cui è associato un GridBagSizer. Questo pannello è posizionato all'interno di un altro Sizer (BoxSizer), il cui add ha il flag di espansione, il che significa che il pannello occupa l'intera larghezza del sizer, il che è fantastico. ... Ma ora il ridimensionatore interno del pannello non riempie il pannello.
Ho provato a impostare il flag del sizer interno su wx.Expand | wx.ALL quando aggiungo i suoi componenti, ma non ha funzionato. Qualcuno sa come assicurarsi che il ridimensionatore rimanga della stessa larghezza del pannello quando il pannello viene espanso? ??
Modifica: il mio codice che crea il pannello contenente 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
Soluzione
Tutto ciò che stai facendo qui sembra ragionevole. Penso che ti manchi una chiamata AddGrowableCol ().
sizer.Add(b, wx.GBPosition(0,0))
sizer.Add(l1, wx.GBPosition(0,1), flag=wx.EXPAND)
sizer.AddGrowableCol(1)
Personalmente ho avuto più fortuna con un FlexGridSizer invece di un GridBagSizer:
fgs = wx.FlexGridSizer(gridRows[fields], 2, 0, 0)
fgs.AddGrowableCol(1)
fgs.Add(wx.StaticText(self, -1, "Contact Phone"), 0, wx.ALL, border)
Altri suggerimenti
Hai l'idea giusta. Se pubblichi un codice (solo alcuni segnaposto, con colori di sfondo diversi o qualcosa del genere in modo che possiamo vedere cosa sta succedendo) sarà più facile diagnosticare. Assicurati che il genitore del Pannello interno sia impostato correttamente e potresti provare alcuni suggerimenti per il dimensionamento: gridbagsizer.SetSizeHints (innerPanel) e vedere se questo aiuta.
Un altro modo possibile per farlo è con un Box Sizer:
sizer = wx.BoxSizer(wx.HORIZONTAL)
sizer.Add(item1)
sizer.Add(item2, proportion=1, flag=wx.EXPAND)
In entrambi i modi ha funzionato! Grazie :)