Kivy предлагает вам хороший выбор макетов в зависимости от ваших потребностей. В этом случае boxlayout не очень хороший подход, так как он позволяет установить только одну ориентацию. Если вы действительно хотите использовать boxlayout, вы должны использовать вертикальную ориентацию для mainlayout, и для каждой строки, где у вас есть более одного входного виджета, вам нужно определить подслой с горизонтальной ориентацией. это может быть что-то вроде этого:
Пример: BoxLayout
from kivy.app import App
from kivy.uix.boxlayout import BoxLayout
from kivy.uix.textinput import TextInput
from kivy.core.window import Window
class MyApp(App):
def build(self):
Window.size = (400, 600)
mainlayout = BoxLayout(orientation="vertical", padding=(20, 40))
sublayout = BoxLayout(orientation="horizontal")
sublayout.add_widget(TextInput(size_hint=(None, None), size=(Window.width * 0.7 - mainlayout.padding[1], Window.height * 0.1)))
sublayout.add_widget(TextInput(size_hint=(None, None), size=(Window.width * 0.3, Window.height * 0.1)))
mainlayout.add_widget(sublayout)
mainlayout.add_widget(TextInput(size_hint=(None, None), size=(Window.width - mainlayout.padding[1], Window.height * 0.1)))
mainlayout.add_widget(TextInput(size_hint=(None, None), size=(Window.width - mainlayout.padding[1], Window.height * 0.1)))
return mainlayout
MyApp().run()
Более простой способ в этом случае - это разметка стека, поскольку она позволяет определить горизонтальное и вертикальное направление. порядок ваших виджетов. Это может выглядеть так:
Пример: StackLayout
from kivy.app import App
from kivy.uix.stacklayout import StackLayout
from kivy.uix.textinput import TextInput
from kivy.core.window import Window
class MyApp(App):
def build(self):
Window.size = (400, 600)
layout = StackLayout(orientation="lr-tb", padding=(20, 40))
layout.add_widget(TextInput(size_hint=(None, None), size=(Window.width * 0.7 - layout.padding[1], Window.height * 0.1)))
layout.add_widget(TextInput(size_hint=(None, None), size=(Window.width * 0.3, Window.height * 0.1)))
layout.add_widget(TextInput(size_hint=(None, None), size=(Window.width - layout.padding[1], Window.height * 0.1)))
layout.add_widget(TextInput(size_hint=(None, None), size=(Window.width - layout.padding[1], Window.height * 0.1)))
return layout
MyApp().run()
Ориентация определяется как «lr-tb», что означает «слева направо», и если больше нет места go "сверху вниз". Вы можете изменить это в соответствии с вашими потребностями. Я надеюсь, я мог бы помочь вам.