null
null

Reputation: 2150

Overlapping TextInputs in Kivy using FloatLayout

Using this code:

from kivy.app import App
from kivy.uix.floatlayout import FloatLayout
from kivy.uix.textinput import TextInput


class Main(App):
    def build(self):
        root = FloatLayout(size=(100, 100))
        root.add_widget(TextInput(pos=(0, 0)))
        root.add_widget(TextInput(pos=(50, 50)))
        return root


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

I get two TextInputs, one on top of the other. When I click on the top TextInput (by clicking somewhere in the middle of the screen), the focus goes to the lower TextInput for some reason. In fact, the only way I can get focus on the top TextInput is by clicking entirely outside of the lower TextInput (by clicking right at the top of the screen). Why does this happen, and how can I circumvent this?

Upvotes: 3

Views: 629

Answers (1)

phunsukwangdu
phunsukwangdu

Reputation: 412

Your problem can be approached in two ways.Float layout honors the pos_hint and the size_hint properties of its children.So you need to set size_hint for textinput.

ie-

from kivy.app import App
from kivy.uix.floatlayout import FloatLayout
from kivy.uix.textinput import TextInput


class Main(App):
    def build(self):
        root = FloatLayout(size=(100, 100))
        root.add_widget(TextInput(pos=(0, 0),size_hint=(0.5,0.5)))
        root.add_widget(TextInput(pos=(100, 100),size_hint=(0.5,0.5)))
        return root


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

or use boxlayout instead of floatlayout

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


class Main(App):
    def build(self):
        root = BoxLayout(size=(100, 100))
        root.add_widget(TextInput(pos=(0, 0)))
        root.add_widget(TextInput(pos=(50, 50)))
        return root


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

Upvotes: 1

Related Questions