如何突出显示wx.Grid单元格中的单个字符?

时间:2014-12-03 16:48:48

标签: python wxpython wxwidgets

我目前正在编写一个蛋白质组学覆盖分析工具(如果你不知道它是什么,它看起来something like this。基本上,我必须提供大量明显的随机文本,并突出显示各个部分我正在使用wx.Grid,禁用单元格轮廓以有组织的方式呈现文本(因为wx.RichTextCtrls无法正确地等宽高亮显示文本,叹息。)然而,在wx.Grids的许多功能中(和wx.XLSGrids等)有突出整个单元格的选项,我找不到突出单元格中特定文本的方法。有没有办法实现这个目标?

1 个答案:

答案 0 :(得分:0)

也许。我所知道的最接近的是Grid小部件的wxPython演示中的Custom Renderer。看看源代码,它似乎是用DC来绘制不同颜色的文本。这是演示中的一个片段:

class MyCustomRenderer(gridlib.PyGridCellRenderer):
    def __init__(self):
        gridlib.PyGridCellRenderer.__init__(self)

    def Draw(self, grid, attr, dc, rect, row, col, isSelected):
        dc.SetBackgroundMode(wx.SOLID)
        dc.SetBrush(wx.Brush(wx.BLACK, wx.SOLID))
        dc.SetPen(wx.TRANSPARENT_PEN)
        dc.DrawRectangleRect(rect)

        dc.SetBackgroundMode(wx.TRANSPARENT)
        dc.SetFont(attr.GetFont())

        text = grid.GetCellValue(row, col)
        colors = ["RED", "WHITE", "SKY BLUE"]
        x = rect.x + 1
        y = rect.y + 1

        for ch in text:
            dc.SetTextForeground(random.choice(colors))
            dc.DrawText(ch, x, y)
            w, h = dc.GetTextExtent(ch)
            x = x + w
            if x > rect.right - 5:
                break

希望这有助于您入门。如果这对您不起作用,那么您可能需要提出自己的渲染器。