0

我有一个 wx.Panel,它有一个与之关联的 GridBagSizer。这个面板被放置在另一个 Sizer (BoxSizer) 中,它的 add 有 expand 标志——这意味着面板占据了 sizer 的整个宽度,这很棒。...但是面板的内部尺寸器现在没有填满面板。

当我添加它的组件时,我尝试将内部sizer 的标志设置为 wx.Expand|wx.ALL,但这不起作用。任何人都知道如何确保在面板展开时大小调整器保持与面板相同的宽度?

编辑:我的代码创建包含 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
4

3 回答 3

1

你在这里所做的一切看起来都很合理。我认为您缺少 AddGrowableCol() 调用。

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

我个人更幸运的是使用 FlexGridSizer 而不是 GridBagSizer:

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

    fgs.Add(wx.StaticText(self, -1, "Contact Phone"), 0, wx.ALL, border)
于 2009-03-06T15:22:20.753 回答
0

你有正确的想法。如果您发布一些代码(只是一些占位符,具有不同的背景颜色或其他东西,以便我们可以看到发生了什么),诊断会更容易。确保正确设置了内部 Panel 的父级,您可以尝试一些 sizer 提示:gridbagsizer.SetSizeHints(innerPanel) 看看是否有帮助。

于 2009-03-04T17:33:43.247 回答
0

另一种可能的方法是使用 Box Sizer:

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

两种方法都奏效了!谢谢 :)

于 2009-03-10T17:00:19.643 回答