2009-08-14 12 views
10

私は様々なサイザーにいくつかのボタンを持っています。しかし、フレーム内のすべての要素の周りに境界線を追加するために使用される新しいwx.BoxSizerに親を追加すると、追加されたサイザーは正しく垂直に機能しますが、水平には機能しません。wxPython:BoxSizerのアイテムは水平方向には展開されず、垂直方向にのみ拡張されます

次のコードは、問題を示しています。ラインととコメントを解除行とをコメントアウト

#! /usr/bin/env python 

import wx 
import webbrowser 

class App(wx.App): 


    def OnInit(self): 
     frame = MainFrame() 
     frame.Show() 
     self.SetTopWindow(frame) 
     return True 


class MainFrame(wx.Frame): 

    title = 'Title' 


    def __init__(self): 
     wx.Frame.__init__(self, None, -1, self.title) 

     panel = wx.Panel(self) 

     #icon = wx.Icon('icon.png', wx.BITMAP_TYPE_PNG) 
     #self.SetIcon(icon) 

     sizer = wx.FlexGridSizer(rows=2, cols=1, vgap=10, hgap=10) 

     button1 = wx.Button(panel, -1, 'BUTTON') 
     sizer.Add(button1, 0, wx.EXPAND) 

     buttonSizer = wx.FlexGridSizer(rows=1, cols=4, vgap=10, hgap=5) 

     buttonDelete = wx.Button(panel, -1, 'Delete') 
     buttonSizer.Add(buttonDelete, 0, 0) 

     buttonEdit = wx.Button(panel, -1, 'Edit') 
     buttonSizer.Add(buttonEdit, 0, 0) 

     buttonNew = wx.Button(panel, -1, 'New') 
     buttonSizer.Add(buttonNew, 0, 0) 

     buttonSizer.AddGrowableCol(0, 0) 

     sizer.Add(buttonSizer, 0, wx.EXPAND|wx.HORIZONTAL) 

     sizer.AddGrowableCol(0, 0) 
     sizer.AddGrowableRow(0, 0) 

     mainSizer = wx.BoxSizer(wx.EXPAND) 
     mainSizer.Add(sizer, 0, wx.EXPAND|wx.ALL, 10) 

     #panel.SetSizerAndFit(sizer) 
     #sizer.SetSizeHints(self) 
     panel.SetSizerAndFit(mainSizer) 
     mainSizer.SetSizeHints(self) 


if __name__ == '__main__': 
    app = App(False) 
    app.MainLoop() 

は余分BoxSizerを削除し、私はすべてが機能することを期待方法を示しています(もちろん空白はありません)。

私は完全にこの問題に固執しており、それを修正する方法についてはまだ手がかりがありません。

答えて

24

まず、いくつかのフラグを間違って渡しています。 BoxSizerは、wx.EXPANDではなくwx.HORIZONTALまたはwx.VERTICALを使用します。 sizer.Addはwx.HORIZONTALを使用しません。

VERTICAL BoxSizerを使用している場合、wx.EXPANDはコントロールを水平に塗りつぶし、1以上の比率(Addの2番目の引数)はコントロールを垂直に塗りつぶします。 HORIZONTAL BoxSizersの逆です。

sizer = wx.BoxSizer(wx.VERTICAL) 
sizer.Add(widget1, 0, wx.EXPAND) 
sizer.Add(widget2, 1) 

ウィジェット1は水平方向に拡張されます。 widget2は垂直方向に拡張されます。

サイザーを別のサイザーに入れた場合、比例と拡大フラグがセットされていることを確認して、内側が望み通りになるようにする必要があります。

私はあなたに残ります。