我正在使用栅格化器将两块面板放在一个框架内。
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)
我希望control_panel位于main_panel之上(如上所示)。然而,这是我得到的输出:
当我指出相反的情况时,我不知道为什么顶部面板比底部面板大得多。 (2,5)为顶部,(5,5)为底部。当我将它调整得更小时它也有一个奇怪的行为,它基本上给了我想要的东西(见下图),但我不知道如何在我再次变大时保持这个比例。
然而,当您开始调整大小(即使是少量)时,您可以看到(下方)形状和比率在另一个方向上发生显着变化(底部变得更小,顶部变得更大)。
仍在尝试学习这些sizer,并且无法通过我见过的任何示例找到这个问题。还尝试了所有参数并做了一些测试,我无法弄清楚这里发生了什么。任何帮助将不胜感激。
编辑:下面的图片已添加到以下评论中。
答案 0 :(得分: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.您可能需要查看窗口小部件检查工具以帮助您可视化它:
答案 1 :(得分:1)
在网格中的七行五列中,您只指定了第一行和第一列可扩展。
控制面板占据第一行,因此它会扩展以占用可用空间。
如果单元格位于可增长的行或列中,则wx.EXPAND标志仅起作用。