2017-02-23 12 views
0

wxPythonでウィジェットの配置に問題があります。wxPythonウィジェットの間隔がデフォルトで間違っています

以下のコードでは、Vbox2とVbox3のボタンはデフォルトで押しつぶされていますが、その理由はわかりません。 BoxSizerは、デフォルトでは、すべての内容に合わせて展開する必要があると私は考えました。

私の質問は、ボタンの混雑を防ぐために何を変更する必要がありますか?メインサイザーへのhboxを追加するとき

import wx 
import sys 


class GridFrame(wx.Frame): 

    def __init__(self, frame_name="grid frame", 
       panel_name="grid panel", parent=None): 
     title = 'Edit {} data'.format(panel_name) 
     super(GridFrame, self).__init__(parent=parent, id=wx.ID_ANY, 
             name=frame_name, title=title) 
     self.remove_cols_mode = False 
     self.panel = wx.Panel(self, name=panel_name)#, size=wx.GetDisplaySize()) 
     self.grid_type = str(panel_name) 
     self.InitUI() 


    ## Initialization functions 
    def InitUI(self): 
     """ 
     initialize window 
     """ 
     self.main_sizer = wx.BoxSizer(wx.VERTICAL) 
     set1, set2, set3 = [], [], [] 
     ## btns set 1 
     for btn_name in ['btn1', 'btn1a']: 
      btn = wx.Button(self.panel, label=btn_name, name=btn_name) 
      set1.append((btn)) 
     ## Btns set 2 
     for btn_name in ['btn2', 'btn3', 'btn4']: 
      btn = wx.Button(self.panel, label=btn_name, name=btn_name) 
      set2.append((btn)) 
     ## btns set 3 
     for btn_name in ['btn5', 'btn6', 'btn7']: 
      btn = wx.Button(self.panel, label=btn_name, name=btn_name) 
      set3.append((btn)) 

     ## Add content to sizers 
     self.hbox = wx.BoxSizer(wx.HORIZONTAL) 
     vbox1 = wx.StaticBoxSizer(wx.StaticBox(self.panel, -1, label='Vbox1'), wx.VERTICAL) 
     vbox2 = wx.StaticBoxSizer(wx.StaticBox(self.panel, -1, label='Vbox2'), wx.VERTICAL) 
     vbox3 = wx.StaticBoxSizer(wx.StaticBox(self.panel, -1, label='Vbox3'), wx.VERTICAL) 
     for btn in set1: 
      vbox1.Add(btn, flag=wx.ALL, border=5) 
     for btn in set2: 
      vbox2.Add(btn, flag=wx.ALL, border=5) 
     for btn in set3: 
      vbox3.Add(btn, flag=wx.ALL, border=5) 
     self.hbox.Add(vbox1, flag=wx.ALL, border=5) 
     self.hbox.Add(vbox2, flag=wx.ALL, border=5) 
     self.hbox.Add(vbox3, flag=wx.ALL, border=5) 

     # final layout, set size 
     self.main_sizer.Add(self.hbox, flag=wx.ALL|wx.ALIGN_CENTER|wx.SHAPED, border=20) 
     self.main_sizer.AddSpacer(20) 
     self.panel.SetSizer(self.main_sizer) 
     self.panel_sizer = wx.BoxSizer(wx.VERTICAL) 
     self.panel_sizer.Add(self.panel, 1) 
     self.SetSizer(self.panel_sizer) 
     self.panel_sizer.Fit(self) 
     self.Centre() 
     self.Show() 


if __name__ == "__main__": 
    app = wx.App() 
    frame = GridFrame() 
    if '-i' in sys.argv: 
     import wx.lib.inspection 
     wx.lib.inspection.InspectionTool().Show() 
    app.MainLoop() 

答えて

1

wx.SHAPEDフラグを削除します。

はここに私の例を実行するための完全なコードです。これにより、hboxの形状(アスペクト比)が内容に必要なものに合わせて変更できるようになります。典型的なレイアウトでは、使用する必要があるときは非常に少ない回数です。wx.SHAPED

関連する問題