其他两个答案中的方法是创建数据类型,将编辑器与数据类型关联,然后将数据类型与列关联。如果有多个具有相同数据类型的列,那么将编辑器与列号分离是一个好主意,因此这些解决方案可能是最好的通用方法。
但是我想要一种更简单的方法,将编辑器与特定列相关联,因为在我的应用程序中,每个列都是不同的数据类型。跨列共享数据类型毫无意义。所以这个答案更符合最初的问题。
这一切都围绕着一个名称混乱的类
wx.grid.GridCellAttr
. 可以原谅您假设name元素
Attr
基本上是指对齐和颜色,因为这就是它的含义,例如,
wx.TextAttr
. 这个类中最清晰的构造器是
GridCellAttr(colText, colBack, font, hAlign, vAlign)
这再次表明
阿特尔
是关于排列和颜色。
但是这个班
wx.grid.grid单元格属性
实际上是一个非常通用的单元格属性描述符类,有超过30种方法用于设置和获取对齐和颜色(如预期的那样),但也有(除其他外)大小、读/写模式、渲染器和
编辑
.
因此,为网格的列设置编辑器的方法是
my_col_property_settings = wx.grid.GridCellAttr()
my_col_property_settings.SetEditor(MyColumnSpecificEditor())
my_col_property_settings.SetAlignment(hAlign=wx.ALIGN_CENTRE, vAlign=wx.ALIGN_CENTRE)
# ... etc ...
self.mygrid.SetColAttr(1, my_col_property_settings)
但如果要为两列设置相同的编辑器,请不要调用
SetColAttr()
与
GridCellAttr
,因为这样做会在程序关闭时出现引用计数错误。相反,做
self.mygrid.SetColAttr(1, my_col_property_settings.Clone())
self.mygrid.SetColAttr(2, my_col_property_settings.Clone())