Kivy多层BoxLayout嵌套时内部按钮size_hint不生效问题咨询
问题原因
这不是Kivy的固有规则,Kivy完全支持多层BoxLayout嵌套,问题出在你对水平BoxLayout的尺寸分配规则不熟悉:
水平方向的BoxLayout会默认将所有子组件的size_hint_x值相加得到总比例,再按每个子组件的size_hint_x占总比例的份额分配宽度。你当前的场景里:
- 包裹b1、b2的BoxLayout是默认水平方向
- b1的
size_hint_x设为0.3,b2的size_hint_x是默认值1 - 两者总比例为0.3+1=1.3,最终b1实际占比为0.3/1.3≈23%,和你预期的30%不符,所以看起来参数不生效。
而你把b1、b2移到外层垂直BoxLayout里时,垂直方向的BoxLayout会单独计算每个子组件的水平尺寸,size_hint_x直接生效,所以表现符合预期。
另外你的Python代码存在拼写错误:你导入的类是App,定义MenuApp时继承的APP大小写不匹配,运行时会报错,需要修正为class MenuApp(App):。
解决方法
如果要实现b1占所在水平BoxLayout 30%宽度,b2占剩下70%宽度,只需要给b2也指定size_hint_x为0.7即可,修改对应kv代码段:
BoxLayout: Button: text: "b1" size_hint: .3, 1 Button: text: "b2" size_hint: .7, 1
如果要让b1固定宽度而非按比例分配,可以取消size_hint_x,手动指定宽度:
Button: text: "b1" size_hint: None, 1 width: 150 # 按需求调整数值
内容的提问来源于stack exchange,提问作者James.L
相关产品推荐
相关产品推荐

