¿Cómo amplío un wx.sizer de un wx.panel cuando el panel se expande dentro de otro wx.sizer?

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

  •  03-07-2019
  •  | 
  •  

Pregunta

Tengo un wx.Panel que tiene asociado un GridBagSizer. Este panel se coloca dentro de otro Sizer (BoxSizer), cuyo complemento tiene la marca de expansión, lo que significa que el panel ocupa todo el ancho del sizer, lo cual es genial. ... Pero el medidor interno del panel no llena el panel ahora.

He intentado establecer el indicador de tamaño interno en wx.Expand | wx.ALL cuando agrego sus componentes, pero eso no funcionó. ¿Alguien sabe cómo asegurarse de que el medidor se mantenga del mismo ancho que su panel cuando se expande el panel?

Editar: Mi código que crea el panel que contiene el 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
¿Fue útil?

Solución

Todo lo que estás haciendo aquí parece razonable. Creo que te estás perdiendo una llamada AddGrowableCol ().

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

Personalmente he tenido más suerte con un FlexGridSizer en lugar de 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)

Otros consejos

Tienes la idea correcta. Si publica algún código (solo algunos marcadores de posición, con diferentes colores de fondo o algo para que podamos ver lo que sucede) será más fácil de diagnosticar. Asegúrate de que el elemento primario del Panel interno esté configurado correctamente, y puedes probar algunos consejos de tamaño: gridbagsizer.SetSizeHints (innerPanel) y ver si eso ayuda.

Otra forma posible de hacer esto es con un Box Sizer:

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

¡Ambos modos funcionaron! Gracias :)

Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top