无法在wxPython虚拟网格中添加列

时间:2017-03-29 19:38:31

标签: python wxpython

我有一个非常大的网格的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

1 个答案:

答案 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