如何更改wxpython CustomTreeCtrl中所选项目的选择颜色
我正在使用wxpython的CustumTreeCtrl。因为我树形结构中的一些项目需要有不同的文字颜色,所以如果这些项目在被选中时也能保持它们的文字颜色,那就太好了。然而,当一个项目被选中时,背景颜色会自动变成蓝色(这个可以通过SetHilightFocusColour()来控制),而且文字的颜色也会变成白色。但在我的情况下,我不想让它变成白色。有没有办法在选中状态下改变项目的文字颜色?SetItemTextColour()只会设置未选中项目的文字颜色……
谢谢。
2 个回答
0
试试从这个链接下载最新的代码:http://svn.wxwidgets.org/svn/wx/wxPython/3rdParty/AGW/agw/customtreectrl.py,可能已经修复了问题。
0
你是在用Mac吗?我在一个很长的PaintItem方法里找到了这段代码:
if wx.Platform == "__WXMAC__" and item.IsSelected() and self._hasFocus:
dc.SetTextForeground(wx.WHITE)
dc.DrawLabel(item.GetText(), textrect)
我不能确定其他平台的情况,但看起来它是使用系统的默认设置。
所以看起来唯一的办法就是修改这个类,添加一个内部的高亮前景色,或者创建一个子类并重写OnPaintItem方法(可惜这需要复制粘贴很多代码)。
编辑
一个简单的解决办法是在__init__
方法里加上这个:
self.highlight_fgc = wx.WHITE
然后在OnPaintItem
方法里,你需要在方法最后的dc.DrawLabel
调用之前加上这段代码:
dc.SetTextForeground(self.highlight_fgc)
最后,在你自己的代码里,你可以设置高亮前景色:
self.tree.highlight_fgc = wx.RED # etc...
或者如果你想让每个项目都有自己的颜色,你可以修改这个项目(是不是有个“SetItemData”方法或者类似的东西)来保存颜色,然后这样做:
dc.SetTextForeground(item.GetItemData()) # or whatever...