Получение элемента панели WxPython для расширения - PullRequest
3 голосов
/ 23 июня 2010

У меня есть фрейм WxPython, содержащий один элемент, например:

class Panel(wx.Panel):
    def __init__(self, parent):
        wx.Panel.__init__(self, parent)
        self.text = wx.StaticText(self, label='Panel 1')

У меня есть рамка, содержащая несколько панелей, включая эту, а размеры определяются размерами. Я бы хотел, чтобы это StaticText расширилось. Использование BoxSizer, содержащего только текст, и установка флага wx.EXPAND делает свое дело, но кажется глупым использовать sizer только для одного элемента.

Есть ли более простое решение?

(Я мог бы просто добавить StaticText в классификатор родительского фрейма напрямую, но для моего дизайна имеет смысл начать непосредственно с фрейма.)


Я только что понял, что при создании BoxSizer с одним элементом не работает с wx.VERTICAL:

class Panel1(wx.Panel):
    def __init__(self, parent):
        wx.Panel.__init__(self, parent)
        self.BackgroundColour = 'red'
        sizer = wx.BoxSizer(wx.VERTICAL)
        self.Sizer = sizer
        self.list = wx.ListBox(self, choices=[str(i) for i in xrange(100)])
        sizer.Add(self.list, 0, wx.EXPAND)
        sizer.Fit(self)

Конечно, с одним элементом все в порядке, но что, если я захочу добавить элемент по вертикали позже и все равно заставить их развернуться (например, когда окно пользователя развернуто)?

Редактировать: ах, я только что узнал, что пропорция должна быть использована для того, чтобы боксеры увеличивались в обоих направлениях (то есть замените 0 на 1 в вызове BoxSizer.Add.)

1 Ответ

6 голосов
/ 23 июня 2010

A wx.Frame автоматически сделает это, если у него только один ребенок. Однако wx.Panel не будет делать это автоматически. Вы застряли с помощью классификатора. Если вы делаете это много, просто сделайте удобную функцию:

def expanded(widget, padding=0):
    sizer = wx.BoxSizer(wx.VERTICAL)
    sizer.Add(widget, 1, wx.EXPAND|wx.ALL, padding)
    return sizer

class Panel(wx.Panel):
    def __init__(self, parent):
        wx.Panel.__init__(self, parent)
        self.text = wx.StaticText(self, label='Panel 1')
        self.SetSizer(expanded(self.text))

Я добавил туда атрибут padding в качестве дополнительного бонуса. Не стесняйтесь использовать это или бросить это.

...