3

次の動作が得られるようにサイザーをネストする方法がわかりません。

ここに画像の説明を入力

ユーザーがウィンドウのサイズを変更するとき、すべてのウィジェットの構成を同じままにしたいのですが、すべてを収容する中央の列を中央に配置したいと考えています。

4

1 に答える 1

4

ボックスサイザーを使用して、それに応じて比率を調整する必要があります。側面のスペーサーは残りのスペースを埋める必要があり、中央部分には一定量のスペースが必要です。次のドキュメントをwx.BoxSizer参照してください。

両方向 (高さと幅) に拡大できますが、子の間で主方向 (行の水平方向) に不均等に拡大できるのは、ボックス サイザーのユニークな機能です。これは、アイテムがサイザーに追加されたときにアイテムに与えられる比率パラメーターによって決定されます。これは、重み係数として解釈されます。つまり、ウィンドウのサイズがまったく変更されないことを示すゼロ、またはゼロを超える可能性があります。複数のウィンドウの値が 0 より大きい場合、その値は sizer のすべての重み係数の合計に対して相対的に解釈されるため、値が 1 の 2 つのウィンドウを追加すると、両方のウィンドウが等しくサイズ変更され、それぞれが利用可能な半分のサイズを受け取ります。固定サイズの項目のサイズが決定された後のスペース。

この小さなサンプル コード (wxFormBuilder を使用して生成) も参照してください。スペーサーの比率は1で、アプリの比率は0であることを強調しました。

class MyFrame1 (wx.Frame):
    def __init__(self):
        super(MyFrame1, self).__init__()

        fluid_sizer = wx.BoxSizer(wx.HORIZONTAL)
        fluid_sizer.AddSpacer((0, 0), 1, wx.EXPAND, 5)
        #                             ^--- proportion = 1

        self.fixed_panel = wx.Panel(self, wx.ID_ANY, wx.DefaultPosition, wx.Size(-1,-1), wx.TAB_TRAVERSAL)
        self.fixed_panel.SetBackgroundColour(wx.SystemSettings.GetColour(wx.SYS_COLOUR_HIGHLIGHT))
        fixed_sizer = wx.BoxSizer(wx.VERTICAL)
        fixed_sizer.SetMinSize(wx.Size(150,-1)) 
        self.m_button1 = wx.Button(self.fixed_panel, wx.ID_ANY, u"MyButton", wx.DefaultPosition, wx.DefaultSize, 0)
        fixed_sizer.Add(self.m_button1, 0, wx.ALL, 5)
        self.fixed_panel.SetSizer(fixed_sizer)
        self.fixed_panel.Layout()
        fixed_sizer.Fit(self.fixed_panel)

        fluid_sizer.Add(self.fixed_panel, 0, wx.EXPAND |wx.ALL, 5)
        #                                 ^--- proportion = 0


        fluid_sizer.AddSpacer((0, 0), 1, wx.EXPAND, 5)
        #                             ^--- proportion = 1

        self.SetSizer(fluid_sizer)
        self.Layout()

サンプルコードのプレビュー

于 2013-01-10T20:58:34.080 に答える