获取WxPython面板项以进行扩展

Bas*_*ard 4 python wxpython frame sizer

我有一个包含单个项目的WxPython框架,例如:

class Panel(wx.Panel):
    def __init__(self, parent):
        wx.Panel.__init__(self, parent)
        self.text = wx.StaticText(self, label='Panel 1')
Run Code Online (Sandbox Code Playgroud)

我有一个框架包含几个面板,包括这个面板,尺寸由sizer统治.我想StaticText扩大这一点.使用BoxSizer仅包含文本和设置wx.EXPAND标志就可以了,但是对于一个项目使用sizer似乎很愚蠢.

更简单的解决方案?

(我可以直接将其添加StaticText到父框架的sizer中,但对于我的设计,直接从框架开始更有意义.)


我刚刚意识到,创建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)
Run Code Online (Sandbox Code Playgroud)

当然可以使用一个项目,但如果我想稍后垂直添加项目并仍然使它们都展开(例如,当用户的窗口展开时)怎么办?

编辑:嗯,我刚发现必须使用这个比例才能让boxsizers以两种方式成长.(即,在1 BoxSizer.Add的呼叫中将0替换为0.)

Fog*_*ird 7

wx.Frame如果只有一个孩子,A 会自动执行此操作.但是,a wx.Panel不会自动执行此操作.你被困在使用sizer.如果你发现自己做了很多,只需做一个便利功能:

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))
Run Code Online (Sandbox Code Playgroud)

我把padding属性作为额外奖励扔在那里.随意使用它或抛弃它.