Kivy - 代码输入



Kivy 框架中的 CodeInput 组件是一个特殊的 TextInput 框,能够显示可编辑的文本,并根据所选语言词法分析器的语法进行高亮显示。

CodeInput 组件需要安装 **pygments** 包。

  • pygments 包是一个 Python 语法高亮器。

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

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

  • 支持以 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 组件是一个多行文本框,可以添加到其他布局类中。可以通过指定以下属性来实例化它:

  • **lexer** - 这是 pygments 用于高亮显示代码的所选 Lexer。它是一个 ObjectProperty,默认为 PythonLexer。

  • **style** - 用于格式化的 pygments 样式对象。当设置 style_name 时,这将更改为相应的样式对象。

  • **style_name** - 用于格式化的 pygments 样式的名称。style_name 是一个 OptionProperty,默认为 'default'。pygments 中有很多可用的样式。一些例子包括 emacs、xcode、vs、bw、colorful 等等。

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

示例

在下面的代码中,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
广告