Не могу понять 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 здесь.