Come faccio ad espandere un wx.sizer di un wx.panel quando il pannello viene espanso all'interno di un altro wx.sizer?

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

  •  03-07-2019
  •  | 
  •  

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
È stato utile?

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 :)

Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top