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