2014-07-16 16 views
3

我正在尋找一種簡單的模式來獲得使用我的窗口內的wx.grid.Grid對象自動適合窗口效果。如何使wxpython網格自動適合窗口

現在我的4列網格在右邊有很多空白區域,但是我發現這非常難看,如果所有列都根據窗口大小更改而展開或摺疊,那麼會更好!

有沒有辦法讓這個工作?

+0

請提供代碼和如何獲取的圖像和你怎麼婉噸至看。小例子將解決這個問題? –

回答

3

使用wx.EXPAND|wx.ALL功能擴展網格

myGrid = gridlib.Grid(panel) 
sizer.Add(myGrid, 1, wx.EXPAND|wx.ALL) 
3

您需要捕獲窗口大小調整事件並將其綁定到事件處理程序。我在這個例子中顯示它:

import wx.grid 

class Frame (wx.Frame): 

     def __init__(self, parent): 
       wx.Frame.__init__ (self, parent, id = wx.ID_ANY, title = u"Test", pos = wx.DefaultPosition, size = wx.Size(650,480), style = wx.DEFAULT_FRAME_STYLE|wx.RESIZE_BORDER|wx.TAB_TRAVERSAL) 

       self.SetSizeHintsSz(wx.DefaultSize, wx.DefaultSize) 
       sizer = wx.BoxSizer(wx.VERTICAL) 
       self.panel = wx.Panel(self, wx.ID_ANY, wx.DefaultPosition, wx.DefaultSize, wx.TAB_TRAVERSAL) 
       self.inner_sizer = wx.BoxSizer(wx.VERTICAL) 
       self.grid = wx.grid.Grid(self.panel, wx.ID_ANY, wx.DefaultPosition, wx.DefaultSize, 0) 

       # Grid 
       self.grid.CreateGrid(10, 4) 
       self.grid.EnableEditing(True) 
       self.grid.EnableGridLines(True) 
       self.grid.EnableDragGridSize(False) 
       self.grid.SetMargins(0, 0) 

       # Columns 
       self.grid.EnableDragColMove(False) 
       self.grid.EnableDragColSize(True) 
       self.grid.SetColLabelSize(30) 
       self.grid.SetColLabelAlignment(wx.ALIGN_CENTRE, wx.ALIGN_CENTRE) 

       # Rows 
       self.grid.EnableDragRowSize(True) 
       self.grid.SetRowLabelSize(80) 
       self.grid.SetRowLabelAlignment(wx.ALIGN_CENTRE, wx.ALIGN_CENTRE) 

       # Label Appearance 

       # Cell Defaults 
       self.grid.SetDefaultCellAlignment(wx.ALIGN_LEFT, wx.ALIGN_TOP) 
       self.inner_sizer.Add(self.grid, 1, wx.ALL|wx.EXPAND, 5) 


       self.panel.SetSizer(self.inner_sizer) 
       self.panel.Layout() 
       self.inner_sizer.Fit(self.panel) 
       sizer.Add(self.panel, 1, wx.EXPAND |wx.ALL, 0) 

       self.grid.Bind(wx.EVT_SIZE, self.OnSize) 

       self.SetSizer(sizer) 
       self.Layout() 
       self.Centre(wx.BOTH) 
       self.Show() 

     def OnSize(self, event): 
       width, height = self.GetClientSizeTuple() 
       for col in range(4): 
         self.grid.SetColSize(col, width/(4 + 1)) 


if __name__ == "__main__": 
     app = wx.App() 
     Frame(None) 
     app.MainLoop() 

如果你有一個變量數列的只是把這個變量代替4 OnSize