我有一个非常大的网格的wxPython GUI。我使用与wxPython演示中的this示例类似的代码 - 即使用PyGridTableBase创建虚拟网格。
但是,当我尝试以交互方式向此网格添加列时,我遇到了麻烦。
调用AppendCols(1)
会导致此错误:
wx._core.PyAssertionError: C++ assertion "Assert failure" failed at /Users/vagrant/pisi-64bit/tmp/wxPython-3.0.2.0-3/work/wxPython-src-3.0.2.0/src/generic/grid.cpp(1129) in AppendCols():
Called grid table class function AppendCols but your derived table class does not override this function
但是如果我尝试覆盖我的表类中的AppendCols
,那么应用程序就会无限期挂起并且永远无法解析。即使我的自定义AppendCols
方法中根本没有任何内容,它也会挂起...
class HugeTable(gridlib.PyGridTableBase):
"""
Table class for virtual grid
"""
def __init__(self, log, num_rows, num_cols):
gridlib.PyGridTableBase.__init__(self)
def AppendCols(self, *args):
pass
我已经能够成功覆盖其他方法,(setValue,getValue,getColLabelValue等),所以我不确定这里有什么不同。
更新
一段时间后我回到了这个问题。我不再获得wx.__core.PyAssertionError
。但是,我仍然无法使用自定义的AppendCols方法。我无法弄清楚要在AppendCols中添加什么来创建一个新的 列。
我不确定如何查看源代码 - 没有任何Python文档似乎有我想要的东西,所以也许我需要深入研究wxWidgets?文档没有帮助:GridHugeTable.py。
答案 0 :(得分:0)
我需要的线索在custom table的演示代码中。
所以,这段代码可以工作(省略我的自定义逻辑,只包括裸骨):
def AppendCols(self, *args):
msg = gridlib.GridTableMessage(self, # The table
gridlib.GRIDTABLE_NOTIFY_COLS_APPENDED, # what we did to it
1) # how many
self.GetView().ProcessTableMessage(msg)
return True