Как развернуть wx.sizer wx.panel, когда панель развернута внутри другого wx.sizer? - PullRequest
0 голосов
/ 04 марта 2009

У меня есть 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

Ответы [ 3 ]

1 голос
/ 06 марта 2009

Все, что вы здесь делаете, выглядит разумно. Я думаю, что вам не хватает вызова 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)
0 голосов
/ 10 марта 2009

Другой возможный способ сделать это с Box Sizer:

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

Оба способа работали! Спасибо:)

0 голосов
/ 04 марта 2009

У вас правильная идея. Если вы разместите некоторый код (только некоторые заполнители, с разными цветами фона или чем-то еще, чтобы мы могли видеть, что происходит), будет легче диагностировать. Убедитесь, что родительский элемент внутренней панели установлен правильно, и вы можете попробовать некоторые подсказки sizer: gridbagsizer.SetSizeHints (innerPanel) и посмотреть, поможет ли это.

...