3

私はこれを理解することができません: sizer.Add では、子ウィジェットのスケーリング比率を識別するためにプロポーションが設定され、wx.EXPAND は子ウィジェットに利用可能な幅を占めるように拡張するように指示します。ただし、フラグを wx.EXPAND に設定せず、比率を 1 に設定すると、子ウィジェットは引き続き展開されます。

では、これら2つの間の関係/違いは何ですか?

ありがとう

4

1 に答える 1

6

比率はサイザータイプに固有です(awx.GridSizerは同じサイズのX * Yセルを作成するため、比率は使用されません)。

の場合、比率はサイザーの軸に沿っwx.BoxSizerた要素のスケールを指定します。に要素を追加すると、軸の項目がスケーリングされます。の要素は、の要素の2倍のサイズにスケーリングされます。比率0は、要素をスケーリングしないことを示します。wx.BoxSizer(wx.HORIZONTAL)proportion > 0proportion=2proportion=1

wx.EXPAND他の軸に沿って使用可能なスペースを埋めるために要素を拡大する必要があることを指定します。wx.BoxSizer(wx.HORIZONTAL)withに要素を追加すると、wx.EXPANDの項目が展開されます。

このデモでは、その効果を示します。

import wx

class Frame(wx.Frame):
    def __init__(self):
        wx.Frame.__init__(self, None, title='BoxSizer demo (resize the frame)')
        self.SetBackgroundColour(wx.WHITE)
        layout = wx.StaticBoxSizer(wx.StaticBox(self,label="wx.BoxSizer(wx.HORIZONTAL)"),wx.HORIZONTAL)
        # proportion=1
        layout.Add( wx.StaticText(self,label='proportion=1', style=wx.BORDER_DOUBLE ), 1, wx.ALL, 10 )
        # proportion=0, expand
        layout.Add( wx.StaticText(self,label='wx.EXPAND', style=wx.BORDER_DOUBLE ), 0, wx.EXPAND|wx.ALL, 10 )
        # proportion=0, align bottom
        layout.Add( wx.StaticText(self,label='wx.ALIGN_BOTTOM', style=wx.BORDER_DOUBLE ), 0, wx.ALIGN_BOTTOM|wx.ALL, 10 )
        # proportion=2, expand
        layout.Add( wx.StaticText(self,label='proportion=2 + wx.EXPAND', style=wx.BORDER_DOUBLE ), 2, wx.EXPAND|wx.ALL, 10 )
        self.SetSizerAndFit(layout)

app = wx.App(False)
Frame().Show()
app.MainLoop()

次のデモは、垂直ボックスサイザー内の水平ボックスサイザーを示しています。

import wx

class Frame(wx.Frame):
    def __init__(self):
        wx.Frame.__init__(self, None, title='BoxSizer demo (resize the frame)')
        self.SetBackgroundColour(wx.WHITE)
        layout = wx.StaticBoxSizer(wx.StaticBox(self,label="wx.VERTICAL"),wx.VERTICAL)
        # row 1
        row = wx.wx.StaticBoxSizer(wx.StaticBox(self,label="wx.HORIZONTAL - proportion=0"),wx.HORIZONTAL)
        row.Add(wx.StaticText(self,label="proportion=0",style=wx.BORDER_DOUBLE),0, wx.ALL,10)
        row.Add(wx.StaticText(self,label="proportion=1",style=wx.BORDER_DOUBLE),1, wx.ALL,10)
        layout.Add(row) # add row 1 without arguments
        # row 2
        row = wx.StaticBoxSizer(wx.StaticBox(self,label="wx.HORIZONTAL - proportion=1"),wx.HORIZONTAL)
        row.Add(wx.StaticText(self,label="proportion=1",style=wx.BORDER_DOUBLE),1, wx.ALL,10)
        row.Add(wx.StaticText(self,label="proportion=2, wx.EXPAND",style=wx.BORDER_DOUBLE),2, wx.EXPAND|wx.ALL,10)
        layout.Add(row,1) # add row 2 with proportion = 1
        # row 3
        row = wx.StaticBoxSizer(wx.StaticBox(self,label="wx.HORIZONTAL - proportion=0, wx.EXPAND"),wx.HORIZONTAL)
        row.Add(wx.StaticText(self,label="proportion=0",style=wx.BORDER_DOUBLE),0, wx.ALL,10)
        row.Add(wx.StaticText(self,label="proportion=1",style=wx.BORDER_DOUBLE),1, wx.ALL,10)
        layout.Add(row,0,wx.EXPAND) # add row 3 with proportion = 0 and wx.EXPAND
        self.SetSizerAndFit(layout)

app = wx.App(False)
Frame().Show()
app.MainLoop()
于 2012-12-22T08:37:32.190 に答える