2008-11-29 14 views
3

如果我有一個包含三個電子表格窗口小部件的筆記本,那麼對電子表格進行更改的最佳方式是更新字典(或者可能是sqlite文件?)。是否所有的wx網格對象都帶有與SetNumberRows和SetNumberCols相關的內置字典?基本上,我正在尋找指導如何與用戶輸入數據從電子表格控件工作,因爲在這個例子改編自教程python.org:wxpython:從wx.lib.sheet.CSheet對象更新字典或其他適當的數據類型

class ExSheet(wx.lib.sheet.CSheet): 
    def __init__(self, parent): 
     sheet.CSheet.__init__(self, parent) 
     self.SetLabelBackgroundColour('#CCFF66') 
     self.SetNumberRows(50) 
     self.SetNumberCols(50) 

class Notebook(wx.Frame): 
    def __init__(self, parent, id, title): 
     wx.Frame.__init__(self, parent, id, title) 
     nb = wx.Notebook(self, -1, style=wx.NB_BOTTOM) 
     self.sheet1 = ExSheet(nb) 
     self.sheet2 = ExSheet(nb) 
     self.sheet3 = ExSheet(nb) 
     nb.AddPage(self.sheet1, "Sheet1") 
     nb.AddPage(self.sheet2, "Sheet2") 
     nb.AddPage(self.sheet3, "Sheet3") 
     self.sheet1.SetFocus() 
     self.StatusBar() 

回答

4

使用wxGridwxGridTableBase代替

下面是一個簡單的例子:

import wx, wx.grid 

class GridData(wx.grid.PyGridTableBase): 
    _cols = "a b c".split() 
    _data = [ 
     "1 2 3".split(), 
     "4 5 6".split(), 
     "7 8 9".split() 
    ] 

    def GetColLabelValue(self, col): 
     return self._cols[col] 

    def GetNumberRows(self): 
     return len(self._data) 

    def GetNumberCols(self): 
     return len(self._cols) 

    def GetValue(self, row, col): 
     return self._data[row][col] 

    def SetValue(self, row, col, val): 
     self._data[row][col] = val 

class Test(wx.Frame): 
    def __init__(self): 
     wx.Frame.__init__(self, None) 
     self.data = GridData() 
     grid = wx.grid.Grid(self) 
     grid.SetTable(self.data) 
     self.Bind(wx.EVT_CLOSE, self.OnClose) 
     self.Show() 

    def OnClose(self, event): 
     print self.data._data 
     event.Skip() 

app = wx.PySimpleApp() 
app.TopWindow = Test() 
app.MainLoop() 
相關問題