2011-07-09 67 views
0

現在、wxPythonのグリップを取得しようとしていますが、ネストしたサイザーをパネル上に配置してフィットさせてしまいました。wxPython - ネストされたサイザー、パネル、SetSizer/Fitの問題

BoxSizerのStaticBoxSizerでGridBagSizerを使用したいと考えています。全体はパネル上にあるべきです。

マイコード:だから

import wx 

class App(wx.Frame): 
    def __init__(self): 
     wx.Frame.__init__(self, None, -1, "Frame", size=(550, 300)) 
     panel = wx.Panel(self, -1) 
     mainSizer = self.makeOuterSizer() 

     # fit layout 
     panel.SetSizer(mainSizer) 
     mainSizer.Fit(panel) 

##   mainSizer.Fit(self) 
##   self.SetSizer(mainSizer) 

    # ---- 

    def makeOuterSizer(self): 

     # define sizer 
     innerSizer = self.makeGrid() 

     # make 
     outerSizer = wx.BoxSizer(wx.VERTICAL) 
     outerSizer.Add(innerSizer, 0, wx.EXPAND|wx.CENTER|wx.ALL, 10) 

     return outerSizer 
    # ---- 

    def makeGrid(self): 

     sizer = wx.StaticBoxSizer(wx.StaticBox(self, -1, ""), wx.VERTICAL) 

     # make fields 
     itemMonomer1_label = wx.StaticText(self, -1, "Text 1") 
     self.itemMonomer1_value = wx.TextCtrl(self, -1, "", size=(100, -1)) 
     itemMonomer2_label = wx.StaticText(self, -1, "Text 2") 
     self.itemMonomer2_value = wx.TextCtrl(self, -1, "", size=(100, -1)) 
     itemMonomer3_label = wx.StaticText(self, -1, "Text 3") 
     self.itemMonomer3_value = wx.TextCtrl(self, -1, "", size=(100, -1)) 

     # pack elements 

     grid = wx.GridBagSizer(2, 3) 

     grid.Add(itemMonomer1_label, (0,0), flag=wx.ALIGN_CENTER|wx.ALIGN_CENTER_VERTICAL) 
     grid.Add(self.itemMonomer1_value, (1,0), flag=wx.EXPAND) 
     grid.Add(itemMonomer2_label, (0,1), flag=wx.ALIGN_CENTER|wx.ALIGN_CENTER_VERTICAL) 
     grid.Add(self.itemMonomer2_value, (1,1), flag=wx.EXPAND) 
     grid.Add(itemMonomer3_label, (0,2), flag=wx.ALIGN_CENTER|wx.ALIGN_CENTER_VERTICAL) 
     grid.Add(self.itemMonomer3_value, (1,2), flag=wx.EXPAND) 

     sizer.Add(grid, 0, wx.EXPAND|wx.ALIGN_CENTER|wx.ALL, 5) 

     return sizer 
    # ---- 

if __name__ == '__main__': 
    app = wx.App() 
    App().Show(True) 
    app.MainLoop() 

、上記のコードは実際に動作しません。しかし、10行目と11行目を引用し、13行目と14行目を引用符で囲まないと、少なくともGridBagSizerは正しく表示されます。だから私はSetSizerとFitラインの何かが間違っていなければならないと思う...しかしパネルはまだ右上に止まっていて、うまくいきません...

何かヒントが多いです!

おかげで、Woodpicker

答えて

0

あなたの代わりに、フレームのパネルの子でなければなりませんパネルに表示するウィジェット。次の変更を試してみてください:あなたはまだあなたがそれをStaticBoxと一緒に展開したい場合はGridBagSizer一つ以上の可変長列を与える必要があります

class App(wx.Frame): 
    def __init__(self): 
     wx.Frame.__init__(self, None, -1, "Frame", size=(550, 300)) 
     self.panel = wx.Panel(self, -1) 
     mainSizer = self.makeOuterSizer() 

     # fit layout 
     self.panel.SetSizer(mainSizer) 
     mainSizer.Fit(self.panel) 

# ... 

def makeGrid(self): 

    sizer = wx.StaticBoxSizer(wx.StaticBox(self.panel, -1, ""), wx.VERTICAL) 

    # make fields 
    itemMonomer1_label = wx.StaticText(self.panel, -1, "Text 1") 
    self.itemMonomer1_value = wx.TextCtrl(self.panel, -1, "", size=(100, -1)) 
    itemMonomer2_label = wx.StaticText(self.panel, -1, "Text 2") 
    self.itemMonomer2_value = wx.TextCtrl(self.panel, -1, "", size=(100, -1)) 
    itemMonomer3_label = wx.StaticText(self.panel, -1, "Text 3") 
    self.itemMonomer3_value = wx.TextCtrl(self.panel, -1, "", size=(100, -1)) 

関連する問題