Python 在wx.GridBagSizer内放置元件(面板)

Python 在wx.GridBagSizer内放置元件(面板),python,user-interface,wxpython,sizer,Python,User Interface,Wxpython,Sizer,我使用gridbagsizer在一个框架内放置两个面板 control_panel = wx.Panel(self, id=ID_CONTROL_PANEL) main_panel = wx.Panel(self, id=ID_MAIN_PANEL) frame_sizer = wx.GridBagSizer(1, 1) frame_sizer.Add(control_panel, (0, 0), (2, 5), flag=wx.EXPAND) frame_sizer.Add(main_pan

我使用gridbagsizer在一个框架内放置两个面板

control_panel = wx.Panel(self, id=ID_CONTROL_PANEL)
main_panel = wx.Panel(self, id=ID_MAIN_PANEL)

frame_sizer = wx.GridBagSizer(1, 1)
frame_sizer.Add(control_panel, (0, 0), (2, 5), flag=wx.EXPAND)
frame_sizer.Add(main_panel, (2, 0), (5, 5), flag=wx.EXPAND)
frame_sizer.AddGrowableRow(0)
frame_sizer.AddGrowableCol(0)
self.SetSizer(frame_sizer)
我希望控制面板位于主面板上方(如上图所示)。然而,这是我得到的输出:

我不知道为什么顶部面板比底部面板大那么多,而我已经指定了相反的方向。(2,5)用于顶部,而(5,5)用于底部。它也有一个奇怪的行为,当我把它变小,它基本上给了我我想要的(见下图),但我不知道如何保持比例,当我把它再次变大

但是,当您开始调整较大的尺寸(即使是较小的尺寸)时,您可以看到(下图)形状和比例在另一个方向发生了显著变化(底部变小,顶部变大)

仍然在努力学习这个sizers,但在我看到的任何例子中都找不到这个问题。我还尝试了所有的参数,做了一些测试,但我不知道这里发生了什么。任何帮助都将不胜感激

编辑:下面的图像添加到下面的辅助注释中。

在网格中的七行五列中,您只指定了可增长的第一行和第一列

控制面板占据第一行,因此它会展开以占用可用空间


wx.EXPAND标志仅在单元格位于可生长的行或列中时有效。

我个人会在垂直方向使用BoxSizer。下面是一个简单的例子:

import wx

class MyForm(wx.Frame):

    def __init__(self):
        wx.Frame.__init__(self, None, wx.ID_ANY, "Tutorial")

        # Add a panel so it looks the correct on all platforms
        panel = wx.Panel(self, wx.ID_ANY)

        control_panel = wx.Panel(panel)
        control_panel.SetBackgroundColour("Yellow")
        main_panel = wx.Panel(panel)
        main_panel.SetBackgroundColour("Blue")

        sizer = wx.BoxSizer(wx.VERTICAL)
        sizer.Add(control_panel, 3, wx.EXPAND)
        sizer.Add(main_panel, 1, wx.EXPAND)
        panel.SetSizer(sizer)

# Run the program
if __name__ == "__main__":
    app = wx.PySimpleApp()
    frame = MyForm().Show()
    app.MainLoop()
我改变了每个面板的背景色,以便于区分哪个是哪个。注意,我给控制面板的比例是3,给主面板的比例是1。您可能还需要查看小部件检查工具,以帮助您将其可视化:


谢谢,我在所有的行和列中都添加了可生长的功能,看起来好多了,但是我实际上希望顶部面板扩展到一定的大小,然后停止。但底部窗口在调整大小时会继续变大。这可能吗?请尝试使用SetMaxSize限制控制面板的高度。还可以使控制面板的高度固定(使用SetSize),而不使其占用的行可增长。或者你可以通过改变这两个面板中每个面板所跨越的可增长行的数量来调整比例。我添加了control_panel.SetMaxSize(wx.Size(150300)),但它似乎没有做任何事情,我仍然可以在任何地方扩展它。此外(这是在使所有行/列都可增长后发生的),当调整到某些形状时,框架边缘会出现一些奇怪的空间(我在上面添加了一个额外的图像)。我仍然可以使用SetMaxSize吗?我希望顶部面板保持相同的大小(y,但可通过x扩展),但底部面板要扩展(x和y)。我不确定…您可能可以使用顶部面板的嵌套大小调整器来获得它,但我不知道。