【发布时间】:2021-05-21 07:22:33
【问题描述】:
所以几个月来我一直在尝试使用不同的技术来制作标记文本输入。然而,它们是一百万个问题。但是,如果我们看到TextInput.py,我们可以看到文本输入使用label 来显示文本。所以我尝试在该标签上添加markup = True。但是我没有看到好的结果。那么为什么 kivy textinput 没有标记。是否可以添加标记。
【问题讨论】:
所以几个月来我一直在尝试使用不同的技术来制作标记文本输入。然而,它们是一百万个问题。但是,如果我们看到TextInput.py,我们可以看到文本输入使用label 来显示文本。所以我尝试在该标签上添加markup = True。但是我没有看到好的结果。那么为什么 kivy textinput 没有标记。是否可以添加标记。
【问题讨论】:
TextInput 使用标签,但它不继承 Label 类。即使您设置了markup = True,也没有任何反应,因为 TextInput 没有该属性。 kivy文件说
The TextInput widget provides a box for editable plain text.
【讨论】:
那么为什么 kivy textinput 没有标记。
最终,因为这很困难,而且没有人想要并且有时间实现该功能。
是否可以添加标记。
这在技术上当然是可行的,但您需要阅读 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] 时,这三个字符突然消失,但光标位置不会后退。解决这个问题是困难的部分。也许有人可以弄清楚那部分。
【讨论】: