パネルが別のwx.sizer内で展開されるときに、wx.panelのwx.sizerを展開するにはどうすればよいですか?

StackOverflow https://stackoverflow.com/questions/611592

  •  03-07-2019
  •  | 
  •  

質問

GridBagSizerが関連付けられているwx.Panelがあります。このパネルは別のSizer(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
役に立ちましたか?

解決

ここで行っていることはすべて合理的に見えます。 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)

他のヒント

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

これを行う別の可能な方法は、Box Sizerを使用することです:

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

両方の方法が機能しました!ありがとう:)

ライセンス: CC-BY-SA帰属
所属していません StackOverflow
scroll top