2014-02-11 44 views
0

以下是我所能做的最簡單的示例。它是在面板內部網格:如何調整面板的大小以適應網格

#!/usr/bin/env python 

import wx 
import wx.grid 

app = wx.App(False) 

class InfoPane(wx.grid.Grid): 
    def __init__(self, parent): 
     wx.grid.Grid.__init__(self, parent) 

     # Set up the presentation 
     self.SetRowLabelSize(0) 
     self.CreateGrid(1, 6) 

     self.SetColLabelAlignment(wx.ALIGN_LEFT, wx.ALIGN_CENTRE) 
     self.SetColLabelValue(0, "Name") 
     self.SetColLabelValue(1, "Status") 
     self.SetColLabelValue(2, "") 
     self.SetColLabelValue(3, "File") 
     self.SetColLabelValue(4, "Last Action") 
     self.SetColLabelValue(5, "Other Info") 

frame = wx.Frame(None) 
panel = wx.Panel(frame) 
info_pane = InfoPane(panel) 

note_sizer = wx.BoxSizer() 
note_sizer.Add(info_pane, 1, wx.EXPAND) 

panel.SetSizerAndFit(note_sizer) 
frame.Show() 

app.MainLoop() 

我想整個事情本身的大小,以使網格的內容都是可見的。會發生什麼,此刻是這樣的:

screenie

(注意:編輯 - 我帶着筆記本出去,甚至更簡化,結果是一樣的看)

想法?謝謝!

+0

爲什麼不在創建時放大窗口? frame = wx.Frame(None,size =(1000,1000)) –

+0

因爲我希望應用程序啓動正確的大小。太大了:網格周圍有很多空白空間(用示例代碼試一下,我想你會明白我的意思)。太小:滾動條。 – GreenAsJade

回答

1

如果添加分級機的框架,當調用框架它將大小的孩子們在合適的方法。

#!/usr/bin/env python 

import wx 
import wx.grid 

app = wx.App(False) 


class InfoPane(wx.grid.Grid): 
    def __init__(self, parent): 
     wx.grid.Grid.__init__(self, parent) 

     # Set up the presentation 
     self.SetRowLabelSize(0) 
     self.CreateGrid(1, 6) 

     self.SetColLabelAlignment(wx.ALIGN_LEFT, wx.ALIGN_CENTRE) 
     self.SetColLabelValue(0, "Name") 
     self.SetColLabelValue(1, "Status") 
     self.SetColLabelValue(2, "") 
     self.SetColLabelValue(3, "File") 
     self.SetColLabelValue(4, "Last Action") 
     self.SetColLabelValue(5, "Other Info") 

frame = wx.Frame(None) 
panel = wx.Panel(frame) 
info_pane = InfoPane(panel) 

note_sizer = wx.BoxSizer() 
note_sizer.Add(info_pane, 1, wx.EXPAND) 

panel.SetSizer(note_sizer) 
frame_sizer = wx.BoxSizer(wx.VERTICAL) 
frame_sizer.Add(panel, 1, wx.EXPAND) 
frame.SetSizerAndFit(frame_sizer) 
frame.Show() 

app.MainLoop() 
+0

甜!這就是我一直在尋找的。這個答案的本質是我設置面板的大小,但不是框架,它是需要調整大小的框架? – GreenAsJade

1

您可以獲取網格的大小並使用它調整其父面板的大小。

試試這個:

panel.SetSizerAndFit(note_sizer) 
gridSize = info_pane.GetVirtualSize() 
frame.Show() 
panel.SetSize(gridSize) 
frame.Fit() 
+0

我明白這是如何工作的。謝謝! – GreenAsJade

相關問題