2017-02-23 54 views
0

我在wxPython中有間隔小部件的問題。默認情況下,wxPython小部件間距不正確

在下面的代碼中,默認情況下,Vbox2和Vbox3中的按鈕被擠壓,我不明白爲什麼。我認爲BoxSizer默認情況下應該展開以適應其所有內容。

我的問題是:我需要改變什麼來防止這種擁擠的按鈕?

以下是完整的代碼運行我的例子:

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