3

我有一个网格应用程序,例如,可以将列标记为超级重要。完成后,我使用Grid.SetColAttr更改列的颜色。但是,当用户删除标志时,我似乎无法撤消SetColAttr. 使用而不是属性对象再次调用它None会导致 Python 神秘地崩溃而没有错误消息,并且遍历所有单元格并调用SetAttr(row, col, None)对列的颜色没有影响。我猜那是因为列属性覆盖了单元格属性None

那么如何撤消单元格属性更改呢?我假设我必须SetColAttr使用“默认”网格属性进行调用,但我什至不知道网格是否具有默认单元格属性或如何获取它。

4

2 回答 2

1

问题是SetColAttr只有SetRowAttrSetAttr(row,col,None)工作(重置单个单元格)。但是,由于这些属性存储在不同的列表(单元格/行/列)中,SetAttr()因此对列或行属性没有影响。

在内部,wxGridTableBase::SetColAttr()尝试将属性的种类 ( wxGridCellAttr::SetKind()) 分配给提供的参数。如果是None,它会尝试调用 None 对象(实际上是空指针)上的方法,这会导致崩溃。

SetColAttr()您可以通过直接调用来绕过该分配wxGridCellAttrProvider(这也将绕过对有效 GridCellAttrProvider 的检查,并且不会清除属性缓存):

self.grid.GetTable().GetAttrProvider().SetColAttr(None,column)

这可能会在属性缓存中留下痕迹,从而导致单元格未被重置。要清除缓存,请调用SetAttr()

self.grid.SetAttr(-1,-1,None) # use invalid coordinates
于 2013-01-09T02:01:49.193 回答
0

您可以获取默认的单元格背景颜色和文本颜色和字体(GetDefaultCellFont、GetDefaultCellBackgroundColour 等)并在此基础上进行设置。我找不到任何东西来获得列的默认属性。也许通过获取单元格的默认值,您可以使用它们来设置列的。

我还发现这个简洁的答案有点相关,可以帮助你弄清楚:

淡入/淡出 wxpython 网格单元格的背景颜色

您还应该阅读 wxPython wiki 上的 wxGrid wiki 页面:http ://wiki.wxpython.org/wxGrid

于 2013-01-08T22:24:59.583 回答