问题描述
所以我几个月来一直在尝试使用不同的技术来制作标记文本输入。然而,他们出现了一百万个问题。但是,如果我们看到 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
中使用来自该 Label
的 TextInput
。通常使用 kivy.core.text.Label
,但上面提到的 import
导致使用 kivy.core.text.markup.MarkupLabel
。
这将为您提供一个 MarkupTextInput
,您可以在其中输入标记(例如[b]
和 [/b]
)。它仍然不完整,因为光标位置将不正确。当您输入[b]
时,这三个字符突然消失,但光标位置不会后退。修复这是困难的部分。也许有人可以弄清楚那部分。