wxpython PyGridTableBase
I want to use editable choice editor with PyGridTableBase. When I edit a cell it is crashing What is error in my code? My python code:
import wx
import wx.grid as gridlib
class MyTableBase(gridlib.PyGridTableBase):
def __init__(self):
gridlib.PyGridTableBase.__init__(self)
self.data = {0:["value 1", "value 2"],
1:["value 3", "value 4", "value 5"]}
self.column_labels = [unicode(u"Label 1"),
unicode(u"Label 2"),
unicode(u"Label 3")]
self._rows = self.GetNumberRows()
self._cols = self.GetNumberCols()
def GetColLabelValue(self, col):
return self.column_labels[col]
def GetNumberRows(self):
return len(self.data.keys())
def GetNumberCols(self):
return len(self.column_labels)
def GetValue(self, row, col):
try:
if 开发者_高级运维col > self.GetNumberCols():
raise IndexError
return self.data[row][col]
except IndexError:
return None
def IsEmptyCell(self, row, col):
if self.data[row][col] is not None:
return True
else:
return False
def GetAttr(self, row, col, kind):
attr = gridlib.GridCellAttr()
editor = gridlib.GridCellChoiceEditor(["xxx", "yyy", "zzz"],
allowOthers = True)
attr.SetEditor(editor)
attr.IncRef()
return attr
class MyDataGrid(gridlib.Grid):
def __init__(self, parent):
gridlib.Grid.__init__(self, parent, wx.NewId())
self.base_table = MyTableBase()
self.SetTable(self.base_table)
if __name__ == '__main__':
app = wx.App(redirect = False)
frame = wx.Frame(None, wx.NewId(), title = u"Test")
grid_ = MyDataGrid(frame)
frame.Show()
app.MainLoop()
I had the same problem here:
wxPython segmentation fault with Editors
Basically, you must set the same editor instance everytime GetAttr is invoked, rather then creating a new editor object everytime.
This example works fine
http://wiki.wxpython.org/GridCellChoiceEditor
Isn't that what you need?
精彩评论