为啥不可能在 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 中使用来自该LabelTexture。通常使用kivy.core.text.Label,但上面提到的import导致使用kivy.core.text.markup.MarkupLabel

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

【讨论】:

以上是关于为啥不可能在 kivy 中制作 Markup TextInput?的主要内容,如果未能解决你的问题,请参考以下文章

Kivy:如何在 kivy 中制作圆角 TextInput?

为啥 Kivy 使用浮点数而不是整数?

Kivy:为啥弹窗是半透明的?

为啥 kivy 应用程序中不显示下一个屏幕?

为啥 Kivy 需要括号,而 Python 不需要括号?

为啥kivy mapview本身在android上似乎是一个错误?