获取要展开的WxPython面板项

2024-09-28 05:26:12 发布

您现在位置:Python中文网/ 问答频道 /正文

我有一个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。)


Tags: 项目self框架面板init尺寸defclass
1条回答
网友
1楼 · 发布于 2024-09-28 05:26:12

如果只有一个子级,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属性作为额外的奖励。你可以随意使用或丢弃它。

相关问题 更多 >

    热门问题