【问题标题】:wxPython - code highlighting and pygmentwxPython - 代码高亮和 pygment
【发布时间】:2016-09-23 16:45:48
【问题描述】:

我正在尝试利用 pygment 在 wxPython RichTextCtrl 中突出显示一些代码。

我在网上找不到太多关于实现这一目标的信息(除了断开的链接)。

这里是一些示例代码。我尝试了几种不同的格式化程序,但都失败了。我相信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()

感谢您的帮助

【问题讨论】:

  • @Shatmers,是否需要使用 wxRichTextCtrl?你可以试试 wxSTC 吗?
  • @Igor,不一定。我会看看它。谢谢编辑:不过,这将如何与 pygment 一起使用?
  • 为什么需要 pygment? wxSTC 和 wxRE 本身都可以正常工作。只需查看 demo/wx C++ 示例。
  • 什么是 wxRE?所以 wx 支持多种语言的代码高亮(我真的不知道)?这就是为什么我需要 pygment
  • Igor 还建议使用wxStyledTextCtrl,我应该补充一点,它是 Scintilla 的包装器,具有许多功能,许多软件都使用 Scintilla。除非必须,否则我不建议使用 wxRichTextCtrl。

标签: python wxpython wxwidgets


【解决方案1】:

我最终按照 cmets 中的建议使用了 StyledTextCtrl。事实证明,wxPython 源代码中包含 2 个演示,其中第二个完全符合我的要求。我会发布代码,但它大约是 400 行。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2014-08-16
    • 1970-01-01
    • 1970-01-01
    • 2019-06-13
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多