wxPython:如何固定网格大小调整器一部分的大小

wxPython:如何固定网格大小调整器一部分的大小,python,wxpython,sizer,Python,Wxpython,Sizer,我想做的是创建3列,它将随着窗口的扩展而扩展。但是我想对它进行限制,这样不同的列可以扩展到不同的最大值 我在这里所做的是使用wxGlade创建一个框架,其中包含一行三列的网格大小调整器。我希望Part1的固定宽度为“a”,Part2的固定宽度为“B”,Part3可以正常扩展 我该怎么做 #!/usr/bin/env python # -*- coding: iso-8859-15 -*- # generated by wxGlade 0.6.3 on Tue May 24 11:35:21 20

我想做的是创建3列,它将随着窗口的扩展而扩展。但是我想对它进行限制,这样不同的列可以扩展到不同的最大值

我在这里所做的是使用wxGlade创建一个框架,其中包含一行三列的网格大小调整器。我希望Part1的固定宽度为“a”,Part2的固定宽度为“B”,Part3可以正常扩展

我该怎么做

#!/usr/bin/env python
# -*- coding: iso-8859-15 -*-
# generated by wxGlade 0.6.3 on Tue May 24 11:35:21 2011

import wx

# begin wxGlade: extracode
# end wxGlade



class MyFrame1(wx.Frame):
    def __init__(self, *args, **kwds):
        # begin wxGlade: MyFrame1.__init__
        kwds["style"] = wx.DEFAULT_FRAME_STYLE
        wx.Frame.__init__(self, *args, **kwds)
        self.panel_1 = wx.Panel(self, -1)
        self.sizer_10_staticbox = wx.StaticBox(self.panel_1, -1, "Part2")
        self.sizer_11_staticbox = wx.StaticBox(self.panel_1, -1, "Part3")
        self.sizer_9_staticbox = wx.StaticBox(self.panel_1, -1, "Part1")

        self.__set_properties()
        self.__do_layout()
        # end wxGlade

    def __set_properties(self):
        # begin wxGlade: MyFrame1.__set_properties
        self.SetTitle("frame_2")
        # end wxGlade

    def __do_layout(self):
        # begin wxGlade: MyFrame1.__do_layout
        sizer_8 = wx.BoxSizer(wx.VERTICAL)
        grid_sizer_4 = wx.GridSizer(1, 3, 0, 0)
        sizer_11 = wx.StaticBoxSizer(self.sizer_11_staticbox, wx.HORIZONTAL)
        sizer_10 = wx.StaticBoxSizer(self.sizer_10_staticbox, wx.HORIZONTAL)
        sizer_9 = wx.StaticBoxSizer(self.sizer_9_staticbox, wx.HORIZONTAL)
        grid_sizer_4.Add(sizer_9, 1, wx.EXPAND, 0)
        grid_sizer_4.Add(sizer_10, 1, wx.EXPAND, 0)
        grid_sizer_4.Add(sizer_11, 1, wx.EXPAND, 0)
        self.panel_1.SetSizer(grid_sizer_4)
        sizer_8.Add(self.panel_1, 1, wx.EXPAND, 0)
        self.SetSizer(sizer_8)
        sizer_8.Fit(self)
        self.Layout()
        # end wxGlade

# end of class MyFrame1


if __name__ == "__main__":
    app = wx.PySimpleApp(0)
    wx.InitAllImageHandlers()
    frame_2 = MyFrame1(None, -1, "")
    app.SetTopWindow(frame_2)
    frame_2.Show()
    app.MainLoop()
如果你用的是a,我可能会建议你看看

一旦您决定了它是否可用,那么您可能需要研究
sizer.addgrowtablerow(row)
sizer.addgrowtablecol(col)
方法。它们允许您指示网格中展开的列或行。它们不会像您熟悉的Boxsizer那样使用比例(因此,如果两个列都以相同的速度增长),但您可以设置一些扩展,而另一些不扩展


索引是以零为基础的,所以根据您的描述,我猜类似于
gridbagsizer_4.AddGrowtableCol(2)
,但正如我的评论所说,wxGlade的命名约定让我感到不舒服,很难确定,而且这些方法在gridbagsizer上不可用


对于任何感兴趣的人,这里有一篇文章介绍了我的表单构建和表单对话框类:。把它贴在我的网站上,在那里我可以包含附件,而不是把它全部粘贴到这里。wxGlade的命名惯例让我很不舒服<代码>自身大小调整器\u 11\u静态框?在大型项目中,几乎不可能知道某些布局函数中发生了什么。。。。没错,我不喜欢wxGlades命名约定,但作为一个快速模拟GUI的工具,我更喜欢它,这意味着它是一个构造函数。对于一个快速工具来说,它是可以的,但是如果你以后需要自定义它,它会成为一个头痛的问题。实际上,我最终推出了自己的表单生成器和表单对话框类,这些类接收结构化对象并将其解析为完整表单。它自动化了施胶器的创建和放置,这在我的书中是一个巨大的优势。如果你有兴趣,我愿意给你拍一份。另外,您可以看看XRCed——它与wxGlade类似,但使用的XML结构并不可怕。我现在正在尝试XRCed,但似乎无法让GridBagSizer正常工作。你能模拟一下我上面的问题是什么样的吗?我可以创建GridBagSizer,但当我尝试向其中添加静态sizer时,它会出错。我也一直在尝试FlexGridSizer,但到目前为止我还不能正确设置最小/最大大小。一个sizer可以有最小大小吗?作为一个测试,我创建了一个wxStaticBox,并能够将其强制为最小大小。然后我创建了一个wxStaticBoxSizer,并使用了相同的选项,使用wxFixed_MINSIZE没有任何效果。据我所知,sizer应该确定自己的最小大小。所以我想我需要做的是能够定义单个列的最大大小。GridBag和FlexGrid“应该”能够通过将特定列设置为增长而将其他列设置为静态大小来实现这一点。但到目前为止,我还不能让它完全发挥作用