2016-09-23 4 views
0

Ich versuche, für einige Code-Hervorhebung in einem wxPython RichTextCtrl pygment zu verwenden.wxPython - Code-Hervorhebung und pygment

Ich kann nicht viel online finden (andere als defekte Links), um dies zu erreichen.

Hier ist ein Beispielcode. Ich habe ein paar verschiedene Formatierer ausprobiert und sie alle versagen. Ich glaube, dass edigra mit pygment und wxpython arbeitet, aber die Quelle ist schwer zu navigieren.

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() 

Vielen Dank für jede Hilfe

+0

@Shatmers, ist es eine Voraussetzung, wxRichTextCtrl zu verwenden? Kannst du wxSTC ausprobieren? – Igor

+0

@Igor, nicht unbedingt. Ich werde es mir ansehen. Danke edit: Wie wird das aber mit pygment funktionieren? – Shatnerz

+0

warum brauchst du pygment? Sowohl wxSTC als auch wxRE funktionieren von selbst. Sehen Sie sich das Demo/wx C++ - Beispiel an. – Igor

Antwort

0

endete ich StyledTextCtrl wie in den Kommentaren vorgeschlagen zu verbrauchen. Es stellt sich heraus, dass es zwei Demos in der wxPython-Quelle gibt, von denen die zweite genau das tut, was ich versuchte. Ich würde den Code posten, aber es ist ~ 400 Zeilen.