2014-12-03 3 views
0

В настоящее время я пишу протеомический инструмент анализа покрытия (если вы не знаете, что это такое, он выглядит something like this. В принципе, я должен представить большое количество явно случайного текста и выделить различные его части. m с помощью wx.Grid с отключенными контурами ячеек, чтобы представить текст организованно (поскольку wx.RichTextCtrls не удается правильно выделить моноширинный выделенный текст, вздох). Однако среди многих функций wx.Grids (и wx.XLSGrids и т. д.) есть варианты выделения целых ячеек, я не могу найти способ выделить конкретный текст внутри ячейки. Есть ли способ достичь этого?Как выделить отдельные символы в ячейке wx.Grid?

+0

У вас есть просмотр ** другого текстового элемента управления для более богатого форматирования текста (который будет wx.StyledTextCtrl, ищите пример в демонстрации wxPython)? Поскольку он основан на текстовом компоненте Scintilla, который используется во многих текстовых редакторах, он должен иметь возможность делать то, что вам нужно. – nepix32

ответ

0

Возможно. Ближайшая вещь, о которой я знаю, это Custom Renderer в демонстрации wxPython для виджета Grid. Глядя на источник, он, кажется, использует DC для рисования текста разными цветами. s отрывок из демонстрационной версии:

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 

Надеюсь, это поможет вам приступить к работе. Если это не сработает для вас, вам, возможно, придется придумать свой собственный рендерер.

Смежные вопросы