代码之家  ›  专栏  ›  技术社区  ›  Bastien Léonard

获取要展开的Wxpython面板项

  •  3
  • Bastien Léonard  · 技术社区  · 14 年前

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

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

    我有一个框架包含几个面板,包括这个面板,尺寸由尺寸控制。 我想要这个 StaticText 扩大。 使用A BoxSizer 只包含文本并设置 wx.EXPAND flag可以做到这一点,但是仅仅为一个项目使用sizer似乎很愚蠢。

    有更简单的解决方案吗?

    (我可以加上 静态文本 直接到父帧的sizer,但对于我的设计来说,直接从帧开始更有意义。)


    我刚刚意识到,当创建一个 博克斯泽 一个项目不适用于 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 回复  |  直到 14 年前
        1
  •  6
  •   FogleBird    14 年前

    wx.Frame 如果它只有一个子级,将自动执行此操作。然而,A 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属性作为额外的奖励扔到那里。您可以随意使用或丢弃它。