使用 FloatLayout 在 Kivy 中重叠文本输入



使用以下代码:

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之外(通过单击屏幕顶部的右侧)。为什么会发生这种情况,我该如何规避这种情况?

您的问题可以通过两种方式解决。浮点布局尊重其子项的pos_hint和size_hint属性。因此,您需要为文本输入设置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()

或使用框布局而不是浮动布局

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

最新更新