【问题标题】:Getting a WxPython panel item to expand获取 WxPython 面板项以展开
【发布时间】:2011-03-07 11:14:15
【问题描述】:

我有一个包含单个项目的 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 添加到父框架的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)

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

编辑:啊,我刚刚发现必须使用比例才能使 boxsizer 双向增长。 (即,在BoxSizer.Add 的调用中将 0 替换为 1。)

【问题讨论】:

    标签: python wxpython frame sizer


    【解决方案1】:

    如果wx.Frame 只有一个孩子,它会自动执行此操作。但是,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))
    

    我把 padding 属性放在那里作为额外的奖励。随意使用或放弃它。

    【讨论】:

    • 是的,比例使它朝着尺寸大小的方向增长。 wx.EXPAND 使其扩展以填充另一个方向。使用它们来双向增长。
    猜你喜欢
    • 1970-01-01
    • 2010-11-06
    • 1970-01-01
    • 1970-01-01
    • 2016-06-20
    • 2017-04-19
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多