Включить только четыре строки ввода текста в Kivy

Я новичок в программировании Kivy. Я хочу включить только 4 строки в текстовом вводе в Kivy. Я могу использовать либо только одну строку, либо несколько строк, но мне нужно текстовое поле, в котором разрешено только 4 строки. Короче говоря, мне нужно текстовое поле, в котором я могу ввести что угодно до четырех строк.


person Akash D G    schedule 28.05.2017    source источник


Ответы (3)


Насколько я знаю, в kivy нет чистого способа сделать это. Вы можете попробовать использовать 4 отдельных TextInput и просто переключать фокус, когда пользователь нажимает 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
            """))
person Edvardas Dlugauskas    schedule 28.05.2017

Вы можете установить счетчик для разрывов строк и/или символов и заблокировать любой новый разрыв строки/символ.

документация по Kivy TextInput

Вы можете использовать значение 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)

Я думаю, что это должно сделать работу

person user8128255    schedule 08.06.2017

В версии 1.11.0 Kivy вы можете просто добавить multiline=False

  TextInput(font_size=20,
            multiline=False,
            height=40)
person Ivan Talalaev    schedule 22.05.2020