2016-09-23 9 views
0

Я пытаюсь использовать pygment для выделения некоторого кода в wxPython RichTextCtrl.wxPython - выделение кода и пигмент

Я не могу найти много онлайн (кроме сломанных ссылок) о достижении этого.

Вот пример кода. Я пробовал несколько разных форматов, и все они терпят неудачу. Я считаю, что editra использует pygment и wxpython, но источник трудно ориентироваться.

import wx 
import wx.richtext 

from pygments import highlight 
from pygments.lexers import get_lexer_by_name 
from pygments.formatters.rtf import RtfFormatter 


lexer = get_lexer_by_name("python", stripall=True) 
formatter = RtfFormatter() 

code = """ # Comment 
a = 5 
print(a) 
print(b) 
""" 

formatted_code = highlight(code, lexer, formatter) 

######################################################################## 
class MyFrame(wx.Frame): 

    # ---------------------------------------------------------------------- 
    def __init__(self): 
     wx.Frame.__init__(self, None, title='Richtext Test') 

     sizer = wx.BoxSizer(wx.VERTICAL) 
     self.rt = wx.richtext.RichTextCtrl(self) 
     self.rt.SetMinSize((300, 200)) 
     self.rt.ChangeValue(formatted_code) 

     sizer = wx.BoxSizer(wx.VERTICAL) 
     sizer.Add(self.rt, 1, wx.EXPAND | wx.ALL, 6) 

     self.SetSizer(sizer) 
     self.Show() 


# ---------------------------------------------------------------------- 
if __name__ == "__main__": 
    app = wx.App(False) 
    frame = MyFrame() 
    app.MainLoop() 

Спасибо за любую помощь

+0

@Shatmers, нужно ли использовать wxRichTextCtrl? Можете ли вы попробовать wxSTC? – Igor

+0

@Igor, не обязательно. Я посмотрю. Спасибо edit: Как это будет работать с пигментом? – Shatnerz

+0

почему вам нужен пигмент? Как wxSTC, так и wxRE отлично работают сами по себе. Просто просмотрите образец демо/wx C++. – Igor

ответ

0

Я закончил с использованием StyledTextCtrl как предложено в комментариях. Оказывается, есть 2 демо, включенных в источник wxPython, второй из которых делает именно то, что я пытался. Я бы опубликовал код, но это ~ 400 строк.