3

我不知道如何嵌套我的尺寸器,以便获得以下行为。

在此处输入图像描述

当用户调整窗口大小时,我希望所有小部件的配置保持不变,但让包含所有内容的中央列保持居中。

4

1 回答 1

4

使用 box sizer,您应该相应地调整比例。侧面的垫片应填满剩余空间,而中间部分应有固定的空间。请参阅以下文档wx.BoxSizer

这是 box sizer 的独特之处,它可以在两个方向(高度和宽度)上增长,但可以在其子项之间不均匀地分布在主要方向(水平方向)上的增长。这是添加到 sizer 时赋予项目的比例参数决定的。它被解释为权重因子,即它可以为零,表示窗口可能根本不会调整大小,或高于零。如果多个窗口的值大于零,则该值将相对于 sizer 的所有权重因子的总和进行解释,因此当添加两个值为 1 的窗口时,它们都将得到相同的大小调整,并且每个都将获得可用的一半固定大小的项目调整大小后的空间。

另请参阅这个小示例代码(使用 wxFormBuilder 生成)。我已经强调了垫片的比例为1而应用程序的比例为0

class MyFrame1 (wx.Frame):
    def __init__(self):
        super(MyFrame1, self).__init__()

        fluid_sizer = wx.BoxSizer(wx.HORIZONTAL)
        fluid_sizer.AddSpacer((0, 0), 1, wx.EXPAND, 5)
        #                             ^--- proportion = 1

        self.fixed_panel = wx.Panel(self, wx.ID_ANY, wx.DefaultPosition, wx.Size(-1,-1), wx.TAB_TRAVERSAL)
        self.fixed_panel.SetBackgroundColour(wx.SystemSettings.GetColour(wx.SYS_COLOUR_HIGHLIGHT))
        fixed_sizer = wx.BoxSizer(wx.VERTICAL)
        fixed_sizer.SetMinSize(wx.Size(150,-1)) 
        self.m_button1 = wx.Button(self.fixed_panel, wx.ID_ANY, u"MyButton", wx.DefaultPosition, wx.DefaultSize, 0)
        fixed_sizer.Add(self.m_button1, 0, wx.ALL, 5)
        self.fixed_panel.SetSizer(fixed_sizer)
        self.fixed_panel.Layout()
        fixed_sizer.Fit(self.fixed_panel)

        fluid_sizer.Add(self.fixed_panel, 0, wx.EXPAND |wx.ALL, 5)
        #                                 ^--- proportion = 0


        fluid_sizer.AddSpacer((0, 0), 1, wx.EXPAND, 5)
        #                             ^--- proportion = 1

        self.SetSizer(fluid_sizer)
        self.Layout()

示例代码预览

于 2013-01-10T20:58:34.080 回答