我有一个wx.Panel,它有一个与之关联的GridBagSizer。此面板放在另一个Sizer(BoxSizer)中,其添加具有扩展标志 - 这意味着面板占据了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
答案 0 :(得分: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)
答案 1 :(得分:0)
你有正确的想法。如果您发布一些代码(只是一些占位符,具有不同的背景颜色或其他东西,以便我们可以看到正在发生的事情),它将更容易诊断。确保内部Panel的父级设置正确,并且您可以尝试一些sizer提示:gridbagsizer.SetSizeHints(innerPanel)并查看是否有帮助。
答案 2 :(得分:0)
另一种可能的方法是使用Box Sizer:
sizer = wx.BoxSizer(wx.HORIZONTAL)
sizer.Add(item1)
sizer.Add(item2, proportion=1, flag=wx.EXPAND)
两种方式都有效!谢谢:))