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

时间:2017-05-28 08:46:45

标签: python kivy textinput kivy-language

我是Kivy编程的新手。 我想在Kivy的文本输入中只启用4行。 我只能使用一行多行,但我想要一个只启用4行的文本字段。 总之,我想要一个文本字段,我可以输入任何东西直到四行

3 个答案:

答案 0 :(得分:3)

据我所知,在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
            """))

答案 1 :(得分: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)

我认为应该做的工作

答案 2 :(得分:0)

在1.11.0 Kivy版本中,您只需添加multiline=False

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