Python KivyMD组件pos_hint属性无法正常生效问题求助
问题原因
你当前所有组件都放在垂直方向的MDBoxLayout中,MDBoxLayout的布局规则是按照子组件的添加顺序沿设置的方向自动分配位置和尺寸,会默认忽略所有子组件的pos、pos_hint定位属性,这是你设置的pos_hint不生效的根本原因。
解决方案
调整布局结构,将需要自定义位置的组件放在支持自由定位的布局容器(比如FloatLayout)中即可,你可以保留顶部工具栏和底部导航栏的垂直BoxLayout结构,中间新增一层FloatLayout用来放需要自定义位置的内容,修改后的KV代码参考如下:
MDScreen: name: "menu" MDBoxLayout: orientation: "vertical" MDToolbar: pos_hint: {"top" : 1} left_action_items: [["menu", lambda x: app.callback(x)]] right_action_items: [["timer", lambda x: app.time()]] # 中间内容区使用支持pos_hint定位的FloatLayout FloatLayout: MDTextFieldRound: pos_hint: {'center_x' : 0.5, 'center_y' : 0.30} hint_text: 'Enter Website URL' size_hint_x: .8 halign: "center" Image: source: "name.png" size_hint: None, None size: 3, 3 pos_hint: {'center_x': 0.5} halign: "center" MDBottomAppBar: MDToolbar: title: "Title" icon: "language-python" type: "bottom" left_action_items: [["menu", lambda x: x]] mode: "free-end"
注意事项
Image组件手动设置size前,需要先将size_hint设为None, None,否则size的设置会被默认的size_hint覆盖不生效- 如果你使用的是较新版本的KivyMD,
MDTextFieldRound已经被废弃,你可以替换为MDTextField并设置mode: "round"来实现相同的圆角输入框效果
内容的提问来源于stack exchange,提问作者Mendoza Mark Renzo
相关产品推荐
相关产品推荐

