0

3 x 3 グリッドを作成する flexgridsizer のこのかなり単純なセットアップがあります:

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

最後に、これらの静的テキストを追加すると、上部中央パネルのサイズが変更され、幅と高さが大幅に大きくなります。フレックスグリッドサイザーのプロポーションをロックする方法はありますか? それとも、この動作を回避するために変更できる何か間違ったことをしていますか?

トラブルシューティングを行ったところ、フォント サイズが大きい場合でも、元のパネル サイズにテキストが収まる十分なスペースがあることがわかりました。フォント サイズを 5 に下げると、非常に小さくなりますが、それでもパネルのサイズが少し大きくなります。パネルの中に収まるのではなく、パネルの中に押し込んでいるように見えます。

4

1 に答える 1

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))
于 2015-04-29T20:04:05.200 に答える