PyQt5 语法高亮编辑器

Posted

技术标签:

【中文标题】PyQt5 语法高亮编辑器【英文标题】:Syntax highlighting editor with PyQt5 【发布时间】:2019-07-26 07:31:23 【问题描述】:

我目前正在开发一个基于 PyQt5 的应用程序,我可以使用(嵌入式)编辑器为 YAML(可能还有 JSON)提供一些语法高亮显示。

我希望 Qt 有一些内置功能,但我发现的只是一些讨论和一些手工实现,例如 this one。

难道没有一种简单的方法可以在现有小部件上激活语法突出显示吗?或者我可能会使用一个紧凑的第 3 方小部件?

【问题讨论】:

【参考方案1】:

您可以将QsciScintilla 类与QScintilla 模块的QsciLexerJSONQsciLexerYAML 词法分析器一起使用。

import sys, os
from PyQt5 import QtWidgets, Qsci

JSON = """

    "glossary": 
        "title": "example glossary",
        "GlossDiv": 
            "title": "S",
            "GlossList": 
                "GlossEntry": 
                    "ID": "SGML",
                    "SortAs": "SGML",
                    "GlossTerm": "Standard Generalized Markup Language",
                    "Acronym": "SGML",
                    "Abbrev": "ISO 8879:1986",
                    "GlossDef": 
                        "para": "A meta-markup language, used to create markup languages such as DocBook.",
                        "GlossSeeAlso": ["GML", "XML"]
                    ,
                    "GlossSee": "markup"
                
            
        
    

"""

YAML = """
--- !clarkevans.com/^invoice
invoice: 34843
date   : 2001-01-23
bill-to: &id001
    given  : Chris
    family : Dumars
    address:
        lines: |
            458 Walkman Dr.
            Suite #292
        city    : Royal Oak
        state   : MI
        postal  : 48046
ship-to: *id001
product:
    - sku         : BL394D
      quantity    : 4
      description : Basketball
      price       : 450.00
    - sku         : BL4438H
      quantity    : 1
      description : Super Hoop
      price       : 2392.00
tax  : 251.42
total: 4443.52
comments: >
    Late afternoon is best.
    Backup contact is Nancy
    Billsmer @ 338-4338.
"""


class JSONEditor(Qsci.QsciScintilla):
    def __init__(self, parent=None):
        super().__init__(parent)
        self.setLexer(Qsci.QsciLexerJSON(self))
        self.setText(JSON)


class YAMLEditor(Qsci.QsciScintilla):
    def __init__(self, parent=None):
        super().__init__(parent)
        self.setLexer(Qsci.QsciLexerYAML(self))
        self.setText(YAML)


if __name__ == "__main__":

    app = QtWidgets.QApplication(sys.argv)
    w = QtWidgets.QWidget()
    lay = QtWidgets.QHBoxLayout(w)
    lay.addWidget(JSONEditor())
    lay.addWidget(YAMLEditor())
    w.resize(640, 480)
    w.show()
    sys.exit(app.exec_())

【讨论】:

如果可能的话会给出更多的+1,因为代码是如此的pythonic

以上是关于PyQt5 语法高亮编辑器的主要内容,如果未能解决你的问题,请参考以下文章

x01.editor: 语法高亮编辑器

x01.editor: 语法高亮编辑器

使用ICSharpCode.TextEditor制作一个语法高亮显示的XML编辑器

如何在Vi/Vim编辑器中启用语法高亮显示

Silverlight XML 编辑器/语法高亮

动态更新 Ace 编辑器的语法高亮模式规则