wxpython Gridsizer不适合面板

时间:2012-12-18 21:24:29

标签: python grid wxpython panel sizer

我正在开发一个wxpython GUI。我有三个面板(左边两个面板水平分开,一个面板右边分开,另外两个面板 - 左半边有两个正方形,右半边有高大的矩形)。我试图在Panel 3中安装Gridsizer(图中的P3)。我似乎无法让网格面板“填充”整个面板3.而是将它们捕捉到顶部和底部。理想情况下,我希望10个小面板(2行,5列)调整大小并很好地填充面板3(所有相同的尺寸和大到足以看到每个)。我究竟做错了什么?谢谢!

****编辑**** 我已将代码更改为如下所示:

        sizer_31 = wx.BoxSizer(wx.VERTICAL)
        gs = wx.GridSizer(0,4,7,7)

        for i in self.Panel_Others.keys():
            gs.Add(self.Panel_Others[i],0,wx.ALIGN_CENTER|wx.ALL,5)

        sizer_31.Add(gs,0,wx.ALIGN_CENTER|wx.ALL,5)
        self.OtherTeams.SetSizer(sizer_31)
        sizer_31.SetSizeHints(self.OtherTeams)

我的新面板3如下图所示。这是一些改进。但是,我希望各个面板(总共10个)扩展相同的数量,以便整个笔记本页面覆盖相同尺寸的较小面板(想象一下日历的样子,每天都是面板)。

enter image description here

****结束编辑****

以下是我的原始代码:

注意:self.OtherTeamsself.Panel3下的wx.Notebook页面。 self.Panel_Others是一个包含我正在显示的wx.Panels的字典(这会动态变化,所以这就是为什么我有一个字典而不是指定它们)。

        sizer_31 = wx.BoxSizer(wx.HORIZONTAL)
        gs = wx.GridSizer(2,5,5,5)

        for i in self.Panel_Others.keys():
            sizer_temp = wx.BoxSizer(wx.VERTICAL)
            sizer_temp.Add(self.Panel_Others[i],1,wx.EXPAND)
            gs.Add(sizer_temp,1,wx.EXPAND,0)

        sizer_31.Add(gs,0,wx.EXPAND)
        self.OtherTeams.SetSizer(sizer_31)

enter image description here

1 个答案:

答案 0 :(得分:1)

wxPython 2.8中,这会导致页面左上角出现单一模糊。 <{1}}对于sizer来说有点聪明,这就是为什么它看起来有点工作的原因。

首先,您在wxPython 2.9内创建GridSizer,但不允许其动态展开(BoxSizer)。 其次,您将sizer设置为wx.EXPAND而不是页面(面板),这将使整个布局向下移动并裁剪网格大小调整器中的底行控件/面板,或者将完全忽略wx.Notebook因此将所有内容移至左上角。

这应该可以解决问题:

2.8

编辑:以下示例演示了如何在wx.Notebook页面中动态更新wx.GridSizer的内容:

sizer_31 = wx.BoxSizer(wx.VERTICAL) # page (panel) sizer for outer border
gs = wx.GridSizer(0,4,7,7) # content sizer

for i in self.Panel_Others.keys():
    gs.Add(self.Panel_Others[i],0,wx.EXPAND|wx.ALL,5) 
    # + wx.EXPAND: allow the content to fill the 'cells'
    #              (proportion is ignored here so it can be 0)
sizer_31.Add(gs,1,wx.EXPAND|wx.ALL,5) 
# + 1, wx.EXPAND: allow the grid to expand to the main sizer
#                 which in turn fits to the page
self.Panel3.SetSizer(sizer_31) # set the sizer to page, not the notebook