我有一个相当简单的flexgridsizer设置创建一个3 x 3网格: (快速注释易读:pvs = sizer,pvp = panel)
pvs["flex"] = wx.FlexGridSizer(rows = 3, cols = 3, vgap = 0, hgap = 0)
for index, vert in enumerate(pv.vertNames):
for horiz in pv.horizNames:
pvp["{0}_{1}".format(vert, horiz)] = wx.Panel(self)
pvp["{0}_{1}".format(vert, horiz)].SetBackgroundColour(c.COLORS["black"])
for panel in pvp.values():
pvs["flex"].Add(panel, flag = wx.EXPAND)
proportions = (1, 6, 1)
for index, prop in enumerate(proportions):
pvs["flex"].AddGrowableCol(index, prop)
pvs["flex"].AddGrowableRow(index, prop)
self.SetSizer(pvs["flex"])
我没有明确设置面板的大小,它们按可增长的行和列比例调整大小。
稍后,我将两个静态文件添加到顶部中间面板:
pvs[me] = {"vert": wx.BoxSizer(wx.VERTICAL)}
pvt[me] = {}
panel.SetForegroundColour(c.COLORS["blue"])
pvt[me]["title"] = wx.StaticText(panel, label = c.TITLE)
pvt[me]["title"].SetOwnFont(titleFont)
pvt[me]["subTitle"] = wx.StaticText(panel, label = c.SUBTITLE)
pvt[me]["subTitle"].SetOwnFont(subFont)
pvs[me]["vert"].Add(pvt[me]["title"], flag = wx.ALIGN_CENTER)
pvs[me]["vert"].Add(pvt[me]["subTitle"], flag = wx.ALIGN_CENTER)
panel.SetSizer(pvs[me]["vert"])
最后问题:添加这些statictexts会使顶部中间面板的大小变得更宽更高。有没有办法锁定flexgridsizer比例?或者也许我做错了我可以改变以避免这种行为?
在故障排除方面,我发现即使字体较大,文本仍有足够的空间放入原始面板尺寸。我可以将字体大小减小到5并且它变得非常小但是仍然可以将面板调整得更大一些,这几乎就像它正在推动它进入面板而不是仅仅适合内部。
答案 0 :(得分:0)
我发现我遇到的问题是我离开的面板没有大小,因此它们可以根据放入的任何东西进行生长。因此,我决定添加明确的尺寸,但仍然可以根据百分比实时创建尺寸,使其灵活适应不同的尺寸:
width = self.package.frame.size[0]
height = self.package.frame.size[1]
corner = ((width * .125), (height * .125))
ns = ((width * .75), (height * .125))
ew = ((width * .125), (height * .75))
mid = ((width * .75), (height * .75))
sizeIter = iter((corner, ns, corner, ew, mid, ew, corner, ns, corner))
然后在创建面板的for循环中执行此操作:
pvp["{0}_{1}".format(vert, horiz)] = wx.Panel(self)
更改为:
pvp["{0}_{1}".format(vert, horiz)] = wx.Panel(self, size = next(sizeIter))