如何在wxpython的CustomTreeCtrl中更改所选项目的选择颜色

时间:2010-10-21 23:42:50

标签: python wxpython

我正在使用wxpython的CustumTreeCtrl。由于我的树层次结构中的某些项目应该具有不同的文本颜色,因此如果这些项目在选择时也保留其文本颜色将非常有用。但是,当选择某个项目时,背景颜色会自动更改为蓝色(可以使用SetHilightFocusColour()控制),并且文本的颜色也会更改为白色。但就我而言,我不希望它变成白色。有没有办法可以在选定状态下更改项目的文本颜色? SetItemTextColour()仅为未选择的项目设置文本颜色...

干杯。

2 个答案:

答案 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 - 它可能已修复。