在wx.GridBagSizer中放置元素(面板)
我正在使用一个叫做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,但在我看到的例子中找不到这个问题的解决办法。我也尝试过调整所有参数并进行一些测试,但还是搞不清楚这是怎么回事。任何帮助都会非常感激。
编辑:下面添加了图片以帮助理解评论。

2 个回答
1
在你指定的这个七行五列的网格中,只有第一行和第一列可以扩展。
控制面板占据了第一行,所以它会扩展来填满可用的空间。
wx.EXPAND这个标志只有在单元格位于可以扩展的行或列时才会起作用。
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()
我把每个面板的背景颜色都改了,这样更容易区分它们。注意,我给控制面板的比例设置为3,而主面板的比例设置为1。你可能还想看看“控件检查工具”,它可以帮助你更好地理解这些布局: