Comment développer un wx.sizer d'un wx.panel lorsque le panneau est développé dans un autre wx.sizer?

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

  •  03-07-2019
  •  | 
  •  

Question

J'ai un wx.Panel auquel est associé un GridBagSizer. Ce panneau est placé dans un autre Sizer (BoxSizer), dont l’ajout a le drapeau expand, ce qui signifie que le panneau occupe toute la largeur du sizer, ce qui est excellent. ... Mais la taille interne du panneau ne remplit pas le panneau maintenant.

J'ai essayé de définir l'indicateur de la taille interne sur wx.Expand | wx.ALL lorsque j'ajoute des composants, mais cela n'a pas fonctionné. Quelqu'un sait-il comment s'assurer que le calibreur a la même largeur que son panneau lorsque le panneau est développé?

Éditer: mon code qui crée le panneau contenant 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
Était-ce utile?

La solution

Tout ce que vous faites ici semble raisonnable. Je pense qu'il vous manque un appel AddGrowableCol ().

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

J'ai personnellement eu plus de chance avec un FlexGridSizer au lieu d'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)

Autres conseils

Vous avez la bonne idée. Si vous postez du code (uniquement des espaces réservés, avec des couleurs d'arrière-plan différentes ou quelque chose afin que nous puissions voir ce qui se passe), le diagnostic sera plus facile. Assurez-vous que le parent du Panel interne est défini correctement et essayez quelques astuces de sizer: gridbagsizer.SetSizeHints (innerPanel) et voyez si cela vous aide.

Une autre façon de procéder consiste à utiliser un Box Sizer:

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

Les deux manières ont fonctionné! Merci:)

Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top