2008-11-29 36 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() 
相关问题