KivyMD MDList跳转报Invalid data after declaration及MDCard自适应问题咨询
问题排查与解决方案
1. "Invalid data after declaration"错误修复
错误由以下几个问题共同引发,按顺序修改即可:
- kv文件开头存在多余的
ScreenManager:声明。你在main.py的build方法中已经手动创建了ScreenManager实例并作为根组件返回,kv文件中额外写根级ScreenManager会导致声明冲突,直接删除这一行即可。 - kv文件中注释格式不规范。你写的
# """Secondly, please is there a way to make MDCard auto resize automatically on any screen"""使用了三重引号,kv语言的注释仅需要#开头,不需要额外加引号,删除三重引号改成普通注释格式即可。 - OneLineIconListItem的事件绑定错误。你使用了
on_touch_down直接赋值跳转逻辑,on_touch_down是底层触摸事件,需要接收touch参数且要判断触摸范围,正确做法是使用ListItem自带的on_press事件,写法调整为on_press: app.change_screen("getting_started_screen")即可,和底部导航栏的事件写法保持一致。 - main.py中存在冗余代码:change_screen方法中前五行给
self.sm.current赋值的代码完全多余,只会导致不必要的屏幕切换,直接删除,仅保留最后一句self.sm.current = screen即可。
2. MDCard自适应屏幕尺寸设置
你现在的MDCard设置了size_hint: None, None和固定的size: "280dp", "360dp",所以大小是固定的,要实现自适应只需要修改size_hint参数,指定宽高占父容器的比例即可,示例如下:
MDCard: orientation: 'vertical' padding: 16 # 删掉原来的size_hint: None, None和固定size设置 size_hint: 0.85, 0.65 # 宽度占父布局的85%,高度占父布局的65%,可自行调整比例 pos_hint: {"center_x": .5, "center_y": .6} elevation: 8 radius: 15
调整后不管屏幕尺寸如何变化,MDCard都会按照设定比例自动适配大小,保持布局一致性。
内容的提问来源于stack exchange,提问作者Edwin
相关产品推荐
相关产品推荐

