'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")

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 |
