【问题标题】: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 没有标记。是否可以添加标记。

【问题讨论】:

    标签: kivy markup 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] 时,这三个字符突然消失,但光标位置不会后退。解决这个问题是困难的部分。也许有人可以弄清楚那部分。

        【讨论】:

          猜你喜欢
          • 2021-11-03
          • 1970-01-01
          • 2020-07-13
          • 1970-01-01
          • 2014-10-20
          • 1970-01-01
          • 1970-01-01
          • 2016-05-25
          • 1970-01-01
          相关资源
          最近更新 更多