将元素(面板)放在wx.GridBagSizer中

joh*_*s85 6 python user-interface wxpython sizer

我正在使用栅格化器将两块面板放在一个框架内.

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)
Run Code Online (Sandbox Code Playgroud)

我希望control_panel位于main_panel之上(如上所示).然而,这是我得到的输出:

替代文字

当我指出相反的情况时,我不知道为什么顶部面板比底部面板大得多.(2,5)为顶部,(5,5)为底部.它也有一个奇怪的行为,当我调整它更小,它基本上给了我想要的东西(见下图),但我不知道如何保持比率,当我再次变大.

替代文字

然而,当您开始调整大小(即使是少量)时,您可以看到(下方)形状和比率在另一个方向上发生显着变化(底部变得更小,顶部变得更大).

替代文字

仍然试图学习这个sizer,并且无法用我见过的任何例子找到这个问题.还尝试了所有参数并做了一些测试,我无法弄清楚这里发生了什么.任何帮助将非常感激.

编辑:下面的图片添加,以帮助评论如下. 替代文字

Mik*_*oll 2

就我个人而言,我会在垂直方向使用 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()
Run Code Online (Sandbox Code Playgroud)

我更改了每个面板的背景颜色,以便更容易区分哪个面板。请注意,我给控制面板的比例为 3,主面板的比例为 1。您可能还想看看 Widget Inspection Tool 以帮助您将其可视化:

http://wiki.wxpython.org/Widget%20Inspection%20Tool