Fry
Fry

Reputation: 4286

How do I expand a wx.sizer of a wx.panel when the panel is expanded inside another wx.sizer?

I have a wx.Panel that has a GridBagSizer associated with it. This panel is placed inside another Sizer (BoxSizer), whose add has the expand flag - meaning that the panel takes up the full width of the sizer, which is great. ...But the panel's internal sizer does not fill the panel now.

I've tried setting the internal sizer's flag to wx.Expand|wx.ALL when I add it's components, but that didn't work. Anybody know how to make sure the sizer stays the same width as it's panel when the panel is expanded?

Edit : My code that creates the panel containing the 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

Upvotes: 0

Views: 3193

Answers (3)

Jim Carroll
Jim Carroll

Reputation: 2330

Everything you're doing here looks reasonable. I think you're missing a AddGrowableCol() call.

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

I've personally had more luck with a FlexGridSizer instead of a GridBagSizer:

    fgs = wx.FlexGridSizer(gridRows[fields], 2, 0, 0)
    fgs.AddGrowableCol(1)

    fgs.Add(wx.StaticText(self, -1, "Contact Phone"), 0, wx.ALL, border)

Upvotes: 1

Fry
Fry

Reputation: 4286

Another possible way to do this is with a Box Sizer:

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

Both ways worked! Thanks :)

Upvotes: 0

Jim Carroll
Jim Carroll

Reputation: 2330

You've got the right idea. If you post some code, (just some placeholders, with different background colors or something so we can see what's happening) it will be easier to diagnose. Make sure that the inner Panel's parent is set correctly, and you might try some sizer hints: gridbagsizer.SetSizeHints(innerPanel) and see if that helps.

Upvotes: 0

Related Questions