4

次のような単一のアイテムを含む WxPython フレームがあります。

class Panel(wx.Panel):
    def __init__(self, parent):
        wx.Panel.__init__(self, parent)
        self.text = wx.StaticText(self, label='Panel 1')

これを含むいくつかのパネルを含むフレームがあり、寸法はサイザーによって決定されます。これを広めてほしいStaticTextBoxSizerテキストだけを含む を使用してwx.EXPANDフラグを設定するとうまくいきますが、サイザーを 1 つの項目だけに使用するのはばかげているように思えます。

もっと簡単な解決策はありますか?

(親フレームのサイザーに直接追加することもできますStaticTextが、私のデザインでは、フレームから直接開始する方が理にかなっています。)


BoxSizer1つのアイテムで を作成すると、 では機能しないことに気付きましたwx.VERTICAL:

class Panel1(wx.Panel):
    def __init__(self, parent):
        wx.Panel.__init__(self, parent)
        self.BackgroundColour = 'red'
        sizer = wx.BoxSizer(wx.VERTICAL)
        self.Sizer = sizer
        self.list = wx.ListBox(self, choices=[str(i) for i in xrange(100)])
        sizer.Add(self.list, 0, wx.EXPAND)
        sizer.Fit(self)

もちろん、1 つのアイテムでも問題ありませんが、後で縦方向にアイテムを追加し、両方を拡大したい場合はどうすればよいでしょうか (たとえば、ユーザーのウィンドウが拡大されたとき)。

編集:ああ、ボックスサイザーを両方の方法で成長させるには、プロポーションを使用する必要があることがわかりました。(つまり、 の呼び出しで 0 を 1 に置き換えBoxSizer.Addます。)

4

1 に答える 1

8

wx.Frame子が 1 つしかない場合、Aはこれを自動的に行います。ただし、wx.Panelこれは自動的には行われません。あなたはサイザーを使用して立ち往生しています。頻繁に行う場合は、便利な関数を作成してください。

def expanded(widget, padding=0):
    sizer = wx.BoxSizer(wx.VERTICAL)
    sizer.Add(widget, 1, wx.EXPAND|wx.ALL, padding)
    return sizer

class Panel(wx.Panel):
    def __init__(self, parent):
        wx.Panel.__init__(self, parent)
        self.text = wx.StaticText(self, label='Panel 1')
        self.SetSizer(expanded(self.text))

追加のボーナスとして、パディング属性をそこに入れました。気軽に使うもよし、捨てるもよし。

于 2010-06-23T18:44:46.700 に答える