我正在使用wxpython的CustumTreeCtrl。由于我的树层次结构中的某些项目应该具有不同的文本颜色,因此如果这些项目在选择时也保留其文本颜色将非常有用。但是,当选择某个项目时,背景颜色会自动更改为蓝色(可以使用SetHilightFocusColour()控制),并且文本的颜色也会更改为白色。但就我而言,我不希望它变成白色。有没有办法可以在选定状态下更改项目的文本颜色? SetItemTextColour()仅为未选择的项目设置文本颜色...
干杯。
答案 0 :(得分: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...
答案 1 :(得分:0)
尝试the latest code from SVN - 它可能已修复。