'How to get the width in characters of a Kivy TextInput or Label

I have a TextInput in Kivy with long content. I want to know the width of the TextInput in characters. In other words, the length of the lines?

textinput = TextInput(text="Open source Python library for rapid development of applications that make use of innovative user interfaces, such as multi-touch apps")

enter image description here



Solution 1:[1]

You can check lines of TextInput using its _lines property. To get their lengths use len() builtin:

from kivy.app import App
from kivy.uix.boxlayout import BoxLayout

from kivy.lang import Builder

Builder.load_string("""

<MyWidget>:
    Button:
        text: "Print width"
        on_press: print([len(line) for line in ti._lines])
    TextInput
        text: "Open source Python library for rapid development of applications that make use of innovative user interfaces, such as multi-touch apps"
        id: ti
""")

class MyWidget(BoxLayout):
    pass

class MyApp(App):
    def build(self):
        return MyWidget()

if __name__ == '__main__':
    MyApp().run()

Solution 2:[2]

Just to improve this discussion: In TextInput._lines_labels is field size (tuple) [0] with width of line. Each line. Just to iterate and look for the biggest and 'voilĂ '. This works with any font (prop or not).

Radek

Sources

This article follows the attribution requirements of Stack Overflow and is licensed under CC BY-SA 3.0.

Source: Stack Overflow

Solution Source
Solution 1 Nykakin
Solution 2 Guy Avraham