首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >如何撤消wx.grid.Grid.SetColAttr?

如何撤消wx.grid.Grid.SetColAttr?
EN

Stack Overflow用户
提问于 2013-01-08 17:23:07
回答 2查看 940关注 0票数 3

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

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

EN

回答 2

Stack Overflow用户

发布于 2013-01-09 10:01:49

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

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

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

代码语言:javascript
复制
self.grid.GetTable().GetAttrProvider().SetColAttr(None,column)

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

代码语言:javascript
复制
self.grid.SetAttr(-1,-1,None) # use invalid coordinates
票数 1
EN

Stack Overflow用户

发布于 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

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/14211748

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档