为什么无法在 kivy 中制作 Markup TextInput?

问题描述

所以我几个月来一直在尝试使用不同的技术来制作标记文本输入。然而,他们出现了一百万个问题。但是,如果我们看到 TextInput.py,我们可以看到 textinput 使用 label显示文本。所以我尝试在该标签添加一个 markup = True。但是我看不到好的结果。那么为什么 kivy textinput 没有标记。以及是否可以添加标记

解决方法

TextInput 使用标签,但它不继承 Label 类。即使您设置了 markup = True,也不会发生任何事情,因为 TextInput 没有该属性。 kivy 文档说

The TextInput widget provides a box for editable plain text.
,

那为什么 kivy textinput 没有标记。

最终,因为这很难,而且没有人想要并且有时间实现该功能。

是否可以添加标记。

这在技术上当然是可行的,但您需要阅读 TextInput 源代码并确定如何添加它。

,

您可以通过将 TextInput 导入为 TextInput 来扩展 MarkupLabel 以创建具有标记功能的 Label,如下所示:

from kivy.core.text.markup import MarkupLabel as Label
from kivy.cache import Cache
from kivy.graphics.texture import Texture

Cache_get = Cache.get
Cache_append = Cache.append


class MarkupTextInput(TextInput):
    def _create_line_label(self,text,hint=False):
        # Copy this method from TextInput with no changes

_create_line_label() 方法创建一个 Label,并在 Texture 中使用来自该 LabelTextInput。通常使用 kivy.core.text.Label,但上面提到的 import 导致使用 kivy.core.text.markup.MarkupLabel

这将为您提供一个 MarkupTextInput,您可以在其中输入标记(例如[b][/b])。它仍然不完整,因为光标位置将不正确。当您输入[b]时,这三个字符突然消失,但光标位置不会后退。修复这是困难的部分。也许有人可以弄清楚那部分。

相关问答

Selenium Web驱动程序和Java。元素在(x,y)点处不可单击。其...
Python-如何使用点“。” 访问字典成员?
Java 字符串是不可变的。到底是什么意思?
Java中的“ final”关键字如何工作?(我仍然可以修改对象。...
“loop:”在Java代码中。这是什么,为什么要编译?
java.lang.ClassNotFoundException:sun.jdbc.odbc.JdbcOdbc...