我正在开发一个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个)扩展相同的数量,以便整个笔记本页面覆盖相同尺寸的较小面板(想象一下日历的样子,每天都是面板)。
****结束编辑****
以下是我的原始代码:
注意:self.OtherTeams
是self.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)
答案 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