0

GridBagSizerが関連付けられているwx.Panelがあります。このパネルは別のサイザー(BoxSizer)内に配置され、その追加には展開フラグがあります。これは、パネルがサイザーの全幅を占めることを意味します。これはすばらしいことです。...しかし、パネルの内部サイザーは現在パネルを埋めていません。

コンポーネントを追加するときに、内部サイザーのフラグをwx.Expand | wx.ALLに設定しようとしましたが、機能しませんでした。パネルが拡張されたときにサイザーがパネルと同じ幅を維持するようにする方法を知っている人はいますか?

編集:GridBagSizerを含むパネルを作成する私のコード:

def getNewButton(self, bmp1, bmp2, label):
        panel = wx.Panel(self.frame, -1, pos=(0,0), style=wx.BORDER_THEME)
        sizer = wx.GridBagSizer(0, 1)

        #The button
        b = buttons.GenBitmapToggleButton(panel, wx.ID_ANY, None)
        self.frame.Bind(wx.EVT_BUTTON, self.OnToggleButton, b)
        b.Bind(wx.EVT_ENTER_WINDOW, self.OnMouseEnter)
        b.Bind(wx.EVT_LEAVE_WINDOW, self.OnMouseLeave)
        mask = wx.Mask(bmp1, wx.BLUE)
        bmp1.SetMask(mask)
        b.SetBitmapLabel(bmp1)
        mask = wx.Mask(bmp2, wx.BLUE)
        bmp2.SetMask(mask)
        b.SetBitmapSelected(bmp2)
        b.SetToggle(False)
        b.SetInitialSize(size = wx.Size(30, 30))
        b.SetBezelWidth(0)

        #The Label Button
        l1 = buttons.GenButton(panel, wx.ID_ANY, label, style=wx.BORDER_NONE)
        self.frame.Bind(wx.EVT_BUTTON, self.OnFlatButton, l1)
        l1.Bind(wx.EVT_ENTER_WINDOW, self.OnMouseEnter)
        l1.Bind(wx.EVT_LEAVE_WINDOW, self.OnNonToggleMouseLeave)

        sizer.Add(b, wx.GBPosition(0,0))
        sizer.Add(l1, wx.GBPosition(0,1), flag=wx.EXPAND)

        panel.SetSizer(sizer)
        sizer.SetSizeHints(panel)
        self.buttonsList.append(ImgToggleButtonComponents(b,panel,l1))
        return panel
4

3 に答える 3

1

ここで行っていることはすべて合理的に見えます。AddGrowableCol()呼び出しが欠落していると思います。

    sizer.Add(b, wx.GBPosition(0,0))
    sizer.Add(l1, wx.GBPosition(0,1), flag=wx.EXPAND)
    sizer.AddGrowableCol(1)

私は個人的にGridBagSizerの代わりにFlexGridSizerでより多くの運がありました:

    fgs = wx.FlexGridSizer(gridRows[fields], 2, 0, 0)
    fgs.AddGrowableCol(1)

    fgs.Add(wx.StaticText(self, -1, "Contact Phone"), 0, wx.ALL, border)
于 2009-03-06T15:22:20.753 に答える
0

あなたは正しい考えを持っています。いくつかのコードを投稿すると (何が起こっているかを確認できるように、背景色が異なるプレースホルダーなど)、診断が容易になります。内側のパネルの親が正しく設定されていることを確認してください。サイザーのヒントである gridbagsizer.SetSizeHints(innerPanel) を試して、それが役立つかどうかを確認してください。

于 2009-03-04T17:33:43.247 に答える
0

これを行う別の方法として、Box Sizer を使用する方法があります。

sizer = wx.BoxSizer(wx.HORIZONTAL)
sizer.Add(item1)
sizer.Add(item2, proportion=1, flag=wx.EXPAND)

どちらの方法もうまくいきました!ありがとう :)

于 2009-03-10T17:00:19.643 に答える