所以我尝试了几个月,使用不同的技术来制作标记文本。然而,随之而来的是无数的问题。然而,如果我们看到TextInput.py
,我们可以看到textput使用label
来显示文本。所以我试着给那个标签加上一个markup = True
。然而,我没有看到好的结果。那么为什么kivy文本没有标记呢?是否可以添加一个标记。
TextInput使用标签,但它不继承Label类。即使设置了markup = True
,也不会发生任何事情,因为TextInput没有该属性。文档说
The TextInput widget provides a box for editable plain text.
那么为什么kivy textput没有标记呢?
最终,因为这很难,没有人想要并且有时间实现这个功能。
是否可以添加标记。
这在技术上当然是可能的,但是您需要阅读TextInput源代码并弄清楚如何添加它。
您可以通过将MarkupLabel
导入Label
来扩展TextInput
以创建具有标记功能的TextInput
,如下所示:
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
,并从TextInput
中的Label
中使用Texture
。通常使用kivy.core.text.Label
,但上面提到的import
导致使用kivy.core.text.markup.MarkupLabel
。
这将给你一个MarkupTextInput
,你可以输入标记(如[b]
和[/b]
)。由于光标位置不正确,因此仍然不完整。当您输入[b]
时,这三个字符突然消失,但光标位置不会恢复。解决这个问题是困难的部分。也许有人能弄明白这一点。