Kivy 简明教程

Kivy - Code Input

Kivy 框架中的 CodeInput 窗口小部件是一个专门的 TextInput 框,它能够显示可编辑的文本,并且该文本会根据所选语言词法分析器的语法高亮显示。

CodeInput 小部件需要 pygments 包已安装。

  1. pygments 包是一个 Python 语法高亮显示器。

  2. 它用于需要美化源代码的应用程序。

  3. Pygments 支持几乎所有的语言,包括编程、脚本语言,甚至有能力提供根据框架和库语法进行的语法高亮显示。

  4. 支持以 Lexer 类的形式提供。例如,要拾取 Python 语法以高亮显示语言元素,我们需要导入 Python3Lexer,对于 C++ 代码,需要导入 CppLexer 类。具体而言,Kivy 代码使用 KivyLexer 高亮显示。

如果当前的工作环境中没有安装 pygments,请运行以下命令 −

pip3 install pygments

CodeInput 类在“kivy.uix.codeinput”模块中定义。

from kivy.uix.codeinput import CodeInput
codewidget = CodeInput(**kwargs)

CodeInput 类继承了 TextInput 类以及 CodeNavigationBehaviou mixin。与 TextInput 对象一样,CodeInput 小部件是一个多行文本框,可以添加到其他布局类。可以通过指定以下属性来对其进行实例化 −

  1. lexer − 保存了 pygments 用于高亮显示代码所使用的选定 Lexer。它是一个 ObjectProperty,其默认值为 PythonLexer。

  2. style − 用于格式化的 pygments 样式对象。设置 style_name 时,这将更改为相应的样式对象。

  3. style_name − 用于格式化的 pygments 样式的名称。style_name 是一个 OptionProperty,其默认值为“默认”。pygments 中有一些样式可用。其中一些示例是 emacs、xcode、vs、bw、colorful 等。

除此之外,该属性还从 TextInput 类中继承。CodeNavigationBehavior mixin 修改了 TextInput 中的导航行为,使其像一个 IDE 而不是文字处理器一样工作。

Example

在以下代码中,CodeInput 小部件使用 PythonLexer 对 Python 源代码执行语法高亮显示。使用 Python 的文件对象读取“code.py”文件,并且将数据分配给 CodeInput 对象的 text 属性。

from kivy.app import App
from kivy.uix.gridlayout import GridLayout
from kivy.uix.codeinput import CodeInput
from pygments.lexers.python import Python3Lexer
from kivy.uix.scrollview import ScrollView
from kivy.uix.codeinput import CodeInput
from kivy.core.window import Window

Window.size = (720,400)

class codeinputdemoapp(App):
   def build(self):
      scr = ScrollView(size=Window.size)
      codinp = CodeInput(style='emacs')
      codinp.height = max(codinp.minimum_height, scr.height)
      file=open('code.py')
      text=file.read()
      codinp.text=text
      scr.add_widget(codinp)
      return scrx

codeinputdemoapp().run()
kivy code input

要突出显示使用与 Kivy 相关的关键字和函数的代码,请加载 KivyLexer。您还可以尝试使用“pigment”样式,将其更改为“colorful”或任何其他可用样式。

from kivy.extras.highlight import KivyLexer

读取“kivycode.py”文件并将其加载到 CodeInput 框中。

file=open('kivycode.py')
text=file.read()
codinp.text=text
kivy code input file

您还可以尝试使用 CppLexer 显示 C++ 代码 −

from pygments.lexers.c_cpp import CppLexer

此时,将样式更改为“friendly”。

file=open('test.cpp')
text=file.read()
codinp.text=text
kivy code cpplexer