【问题标题】:wxPython -- Adding statictext resizes the panelwxPython -- 添加静态文本调整面板大小
【发布时间】:2015-07-08 06:09:03
【问题描述】:

我有一个相当简单的 flexgridsizer 设置,创建一个 3 x 3 网格: (便于阅读的快速注释:pvs = sizers,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"])

我没有明确设置面板的大小,它们的大小由可增长的行和列比例决定。

后来,我在顶部中间面板中添加了 2 个静态文本:

    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"])

最后是问题:添加这些静态文本会调整顶部中间面板的大小,使其显着更宽更高。有没有办法锁定 flexgridsizer 比例?或者也许我做错了什么我可以改变以避免这种行为?

在故障排除过程中,我发现即使字体很大,文本也有足够的空间以适应原始面板大小。我可以将字体大小降低到 5,它会变得非常小,但仍会将面板的大小调整得稍微大一点,这几乎就像它正在将其推入面板而不是仅仅适合里面。

【问题讨论】:

  • 看起来很有趣,但我仍然很难准确理解问题所在。你能做一个最小的示例代码来重现你的问题吗? stackoverflow.com/help/mcve
  • @otterb:感谢收看。当我想出自己喜欢的答案时,我正要举一个最小的例子。我把它贴在下面了。

标签: python user-interface wxpython sizer


【解决方案1】:

我发现我遇到的问题是我留下的面板没有尺寸,因此它们可以根据放入其中的任何内容进行增长。所以我决定添加明确的尺寸,但仍然通过根据百分比动态创建尺寸来保持它们对不同帧尺寸的灵活性:

    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))

【讨论】:

猜你喜欢
  • 2013-08-25
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2013-12-22
  • 2012-11-22
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多