1
我想創建一個GridCellChoiceEditor版本,它允許在運行時更改選項列表。原因是要顯示的選擇是對我的數據進行查詢的結果,因此每次使用編輯器時都可能會發生變化。我這樣做是繼承PyGridCellEditor,但是每當我運行它,創建編輯器後立即segfaults。這裏是我的代碼,簡化了測試使用靜態列表的目的,只有一個格:SEGFAULT與自定義wx.PyGridCellEditor
import wx
import wx.grid
class ListEditor(wx.grid.PyGridCellEditor):
def __init__(self, options):
super(ListEditor, self).__init__()
self.options = options
def ApplyEdit(self, row, col, grid):
grid.SetValue(row, col, self.value)
def BeginEdit(self, row, col, grid):
print('begin edit')
value = grid.GetValue(row, col)
index = self.options.index(value)
self.combo.SetOptions(self.options)
self.combo.SetIndex(index)
def Create(self, parent, id, evtHandler):
self.combo = wx.ComboBox(parent, id)
print('combo created')
def Clone(self):
return ListEditor(self.options)
def EndEdit(self, row, col, grid, oldval, newval):
if oldval == newval:
return False
else:
self.value = newval
return True
def Reset(self):
pass
def GetValue(self):
return 'a'
class F(wx.Dialog):
def __init__(self):
super(F, self).__init__(None)
self.grid = wx.grid.Grid(self, -1, (0, 0), (300, 300))
self.grid.CreateGrid(1, 1)
editor = ListEditor(['a', 'b', 'c'])
self.grid.SetCellEditor(0, 0, editor)
app = wx.App(False)
f = F()
f.Show()
app.MainLoop()
誰能告訴我我要去哪裏錯了嗎?
如果它發生了段錯誤,那麼你幾乎肯定不會做任何錯誤的事情,因爲無論你在wxPython中做什麼,它都不會崩潰。所以你可能應該報告這是一個錯誤... –