使用FloatLayout在Kivy中重叠TextInputs

时间:2017-02-01 08:10:19

标签: python user-interface kivy textinput

使用此代码:

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()

我得到两个TextInput,一个在另一个之上。当我点击顶部TextInput(通过点击屏幕中间的某个位置)时,由于某种原因,焦点会转到较低的TextInput。事实上,我可以专注于顶部TextInput的唯一方法是完全点击下方的TextInput(通过点击屏幕顶部的右侧)。为什么会这样,我怎么能绕过这个?

1 个答案:

答案 0 :(得分:0)

您的问题可以通过两种方式解决。Float layout尊重其子项的pos_hint和size_hint属性。因此您需要为textinput设置size_hint。

即 -

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()

或使用boxlayout而不是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()