wxPython:如何固定网格布局中某部分的大小

2 投票
1 回答
4103 浏览
提问于 2025-04-16 18:15

我想做的是创建三个列,当窗口变大时,这三个列也会跟着变大。但我希望给它们设定一些限制,让不同的列扩展到不同的最大宽度。

我在这里做的是使用wxGlade创建了一个框架,里面有一个网格布局,包含1行和3列。我希望第一个部分的宽度固定为'A',第二个部分的宽度固定为'B',而第三个部分可以像正常一样扩展。

我该怎么做呢?

#!/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()

1 个回答

1

如果你正在使用一个叫做 GridSizer 的工具,我建议你可以看看 GridBagSizer,可能会更合适。

一旦你决定了哪个工具更好用,你可能需要了解一下 sizer.AddGrowableRow(row)sizer.AddGrowableCol(col) 这两个方法。它们可以让你指定在网格中哪些行或列是可以扩展的。和你熟悉的 BoxSizers 不同,这里不使用比例(也就是说,如果有两列都要扩展,它们会以相同的速度扩展),但你可以设置一些列或行可以扩展,而其他的则不扩展。

索引是从零开始的,所以根据你的描述,我猜可能是像 gridbagsizer_4.AddGrowableCol(2) 这样的写法。不过正如我评论中提到的,wxGlade 的命名规则让我觉得不太舒服,所以很难确定,而且这些方法在 GridSizer 上是不可用的。

对于感兴趣的人,这里有一篇关于我表单构建和对话框类的帖子,链接在这里: 表单构建器。我觉得在我的网站上发布更方便,因为可以附加文件,而不是在这里粘贴所有内容。

撰写回答