我有一个网格应用程序,例如,可以将列标记为超重要。完成后,我使用Grid.SetColAttr更改列的颜色。但是,当用户删除该标志时,我似乎无法撤消SetColAttr。使用None而不是属性对象再次调用它会导致Python神秘地崩溃,并且没有错误消息,并且迭代所有单元格并调用SetAttr(row, col, None)对列的颜色没有任何影响。我猜这是因为当单元格属性为None时,列属性覆盖了单元格属性。
那么,如何撤消单元格属性的更改呢?我假设我必须使用“默认”网格属性调用SetColAttr,但我甚至不知道网格是否有默认的单元格属性,也不知道如何获取它。
发布于 2013-01-09 10:01:49
问题只与SetColAttr和SetRowAttr有关。SetAttr(row,col,None)工作(重置单个单元格)。但是,由于这些属性存储在不同的列表(单元格/行/列)中,因此SetAttr()对列或行属性没有影响。
在内部,wxGridTableBase::SetColAttr()尝试将属性的种类(wxGridCellAttr::SetKind())分配给所提供的参数。在None的情况下,它试图调用None对象(实际上是空指针)上的方法,这会导致崩溃。
您可以通过直接在wxGridCellAttrProvider上调用SetColAttr()来绕过该赋值(这也将绕过对有效GridCellAttrProvider的检查,并且不会清除属性缓存):
self.grid.GetTable().GetAttrProvider().SetColAttr(None,column)这可能会在属性缓存中留下痕迹,导致单元未被重置。要清除缓存,请调用SetAttr()
self.grid.SetAttr(-1,-1,None) # use invalid coordinates发布于 2013-01-09 06:25:00
您可以获取默认的单元格背景颜色、文本颜色和字体(GetDefaultCellFont、GetDefaultCellBackgroundColour等),并在此基础上进行设置。但是,我找不到任何东西来获取列的默认属性。也许通过获取单元格的默认值,您可以使用它们来设置列的默认值。
我还找到了这个简洁的答案,这可能会帮助你弄清楚:
Fade in/out the background color of wxpython grid cell
您还应该阅读wxPython维基上的wxGrid维基页面:http://wiki.wxpython.org/wxGrid
https://stackoverflow.com/questions/14211748
复制相似问题