Не могу понять size_hint. Почему этот.kv просто код не работает, как я ожидал?

Я изучаю библиотеку Kivy, но у меня есть некоторые проблемы. Я пытаюсь сделать простое приложение для смены экрана, чтобы выполнить какое-то упражнение, но я делаю некоторые ошибки здесь, я думаю:

                    BoxLayout:
                        orientation:"horizontal"
                        size_hint:1,0.5
                        Label :
                            text : "Nome :"
                        TextInput :
                            id : _name
                            multiline: False
                        Label :
                            text : "Cognome :"
                        TextInput :
                            id : _surname
                            multiline: False

Код является:

<ROT>:
    FloatLayout:
        AnchorLayout:
            anchor_y : "top"
            anchor_x: "right"
            BoxLayout:
                orientation : "horizontal"
                spacing: 10
                size_hint: 0.4,0.1
                Button:
                    id : "_bfr"
                    text : "<-----"

                Button:

                    id : "_aft"
                    text : "----->"
        AnchorLayout :
            anchor_x : "center"
            anchor_y : "bottom"
            ScreenManager:
                size_hint_y : 0.9
                id : _manager
                Screen :
                    name : "uno"
                    BoxLayout :
                        padding :50
                        spacing :10
                        orientation : "vertical"
                        BoxLayout:
                            orientation:"horizontal"
                            size_hint:1,0.5
                            Label :
                                text : "Nome :"
                            TextInput :
                                id : _name
                                multiline: False
                            Label :
                                text : "Cognome :"
                            TextInput :
                                id : _surname
                                multiline: False

Я хочу, чтобы последний написанный boxlayout был 1/2 экрана, который включает его. Я не могу понять, если

size_hint

связан с измерением окна или с измерением "родителя", который включает этот виджет

1 ответ

Size_hints обычно ссылаются на ваш родительский виджет. В этом случае BoxLayout равен 0,5 вашего ScreenManager, что составляет 0,9 вашего окна. В этом случае BoxLayout составляет 45% вашего окна по вертикали.

Если вы хотите, чтобы BoxLayout занимал ровно 50% экрана, вы можете ссылаться на размер корневого виджета (самый верхний родительский элемент, завернутый в стрелки)


size_hints обычно ссылаются на непосредственный родительский виджет. Однако вы можете изменить это, ссылаясь на свой корневой виджет напрямую (верхний виджет, завернутый в стрелки), написав что-то вроде этого:

<Root>:
    WidgetLayout1: 
        size_hint: .2, .2
        BoxLayout:
            size_hint: root.width, root.height / 2

В этом случае BoxLayout больше, чем его родитель, потому что его размер равен всей ширине корневого виджета и половине его высоты.

Однако в вашем примере ваш второй блок находится внутри другого BoxLayout, у которого есть отступы и интервалы, у которых есть свои собственные правила относительно интервалов и размеров, которые, вероятно, отменят ваши собственные определенные подсказки размера. Не говоря уже о других правилах AnchorLayout, которые будут ограничивать вас даже в определенных областях экрана.

Вы можете прочитать больше о BoxLayout здесь.

Другие вопросы по тегам