Отключение переноса текста в TextInput - PullRequest
1 голос
/ 29 марта 2019

Есть ли способ отключить перенос текста в виджете TextInput? То есть я все еще хотел бы иметь разрывы строк, но я не хочу заключать слова в абзац. Так что кажется multiline=False это не то, что я ищу

Обновление: я имею в виду, что в Windows есть опция «Перенос по словам» (например, Windows 7). Блокнот Microsoft (Формат - Перенос по словам). Я хочу отключить эту опцию в kivy TextInput

1 Ответ

1 голос
/ 31 марта 2019

Я не пользуюсь Windows, но для меня это звучит как горизонтальная прокрутка. TextInput выполняет горизонтальную прокрутку по умолчанию, если для multiline установлено значение False, но не для multiline, равной True. Итак, вот хак, чтобы поместить TextInput в ScrollView, чтобы обеспечить горизонтальную прокрутку, когда multiline - True:

from kivy.app import App
from kivy.lang import Builder
from kivy.properties import NumericProperty
from kivy.uix.scrollview import ScrollView
from kivy.uix.textinput import TextInput


class MyTextInput(TextInput):
    minimum_width = NumericProperty(1)

    def on_cursor(self, instance, newPos):
        # determine scroll position of parent ScrollView if multiline is True
        if not (isinstance(self.parent, ScrollView) and self.multiline):
            return super(MyTextInput, self).on_cursor(instance, newPos)
        if newPos[0] == 0:
            self.parent.scroll_x = 0
        else:
            over_width = self.width - self.parent.width
            if over_width <= 0.0:
                return super(MyTextInput, self).on_cursor(instance, newPos)
            view_start = over_width * self.parent.scroll_x
            view_end = view_start + self.parent.width
            offset = self.cursor_offset()
            desired_view_start = offset - 5
            desired_view_end = offset + self.padding[0] + self.padding[2] + self.cursor_width + 5
            if desired_view_start < view_start:
                self.parent.scroll_x = max(0, desired_view_start / over_width)
            elif desired_view_end > view_end:
                self.parent.scroll_x = min(1, (desired_view_end - self.parent.width) / over_width)
        return super(MyTextInput, self).on_cursor(instance, newPos)

    def on_text(self, instance, newText):
        # calculate minimum width
        width_calc = 0
        for line_label in self._lines_labels:
            width_calc = max(width_calc, line_label.width + 20)   # add 20 to avoid automatically creating a new line
        self.minimum_width = width_calc


theRoot = Builder.load_string('''
ScrollView:
    id: scroller
    effect_cls: 'ScrollEffect'  # keeps from scrolling to far
    MyTextInput:
        size_hint: (None, 1)
        width: max(self.minimum_width, scroller.width)
''')

class TI_in_SV(App):
    def build(self):
        return theRoot

TI_in_SV().run()

Обратите внимание, что MyTextInput расширяется TextInput.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...