在 Kivy 中仅启用四行文本输入

Posted

技术标签:

【中文标题】在 Kivy 中仅启用四行文本输入【英文标题】:Enable only four line in text Input in Kivy 【发布时间】:2017-10-28 18:06:13 【问题描述】:

我是 Kivy 编程的新手。 我只想在 Kivy 的文本输入中启用 4 行。 我可以只使用一行或多行,但我想要一个仅启用 4 行的文本字段。 简而言之,我想要一个文本字段,我可以在其中输入任何内容,直到四行

【问题讨论】:

【参考方案1】:

据我所知,在 kivy 中没有干净的方法可以做到这一点。您可以尝试使用 4 个单独的 TextInputs 并在用户按 Enter 时切换焦点。这是一个例子:

from kivy.base import runTouchApp
from kivy.lang import Builder

runTouchApp(Builder.load_string("""
BoxLayout:
    orientation: "vertical"
    TextInput:
        multiline: False # one line only
        on_text_validate: t1.focus = True # when Enter is pressed, switch focus
    TextInput:
        id: t1
        multiline: False
        on_text_validate: t2.focus = True
    TextInput:
        id: t2
        multiline: False
        on_text_validate: t3.focus = True
    TextInput:
        id: t3
        multiline: False
            """))

【讨论】:

【参考方案2】:

您可以为换行符和/或字符设置计数器并阻止任何新的换行符/字符。

Kivy TextInput documentation

您可以使用row 值。这可以通过 TextInput 的过滤功能进行管理。

编辑: 一个小例子类:

class TInput(TextInput):

    def __init__(self,**kwargs):
        super(TInput,self).__init__(**kwargs)
        self.__lineBreak__=0

    def insert_text(self, substring, from_undo=False):
        if "\n" in substring and self.__lineBreak__ <= 4:
            self.__lineBreak__ += 1
            self.__s__ = substring
        elif self.__lineBreak__ > 4 and "\n" in substring:
            self.__s__ = ""
        return super(TInput, self).insert_text(s, from_undo=from_undo)

我认为应该可以完成这项工作

【讨论】:

【参考方案3】:

在 1.11.0 Kivy 版本中,您可以简单地添加multiline=False

  TextInput(font_size=20,
            multiline=False,
            height=40)

【讨论】:

以上是关于在 Kivy 中仅启用四行文本输入的主要内容,如果未能解决你的问题,请参考以下文章

Kivy GUI 冻结

在 Kivy Python 中使用预定义值创建文本输入

在 Kivy 应用程序中获取文本输入值

如何在 Kivy 的相应文本输入区域中获取输出?

Kivy/Python 文本输入焦点

文本输入突然停止在 Kivy 应用程序中工作