KivyMD点击Sign In按钮报错:'NoneType'无current属性
错误原因分析与解决方法
错误原因
- 应用根组件未正确绑定:原代码中
build()方法仅调用了load_all_kv_files()但未返回生成的MDScreenManager实例,导致KivyMD无法将屏幕管理器与应用关联。登录页(MDScreen)的manager属性因此为None,点击"Sign In"按钮执行root.manager.current时触发AttributeError。 - 潜在变量未定义问题:登录页的"Sign Up"按钮使用了未声明的
screen_manager变量,后续也会引发类似错误。
解决方法
1. 修正Python代码的build()方法
确保build()返回MDScreenManager实例,让应用正确加载根组件:
from kivymd.app import MDApp from kivy.core.window import Window from kivy.lang.builder import Builder from kivymd.uix.screenmanager import MDScreenManager Window.size = [320, 600] class ShopApp(MDApp): def build(self): # 返回ScreenManager作为应用根组件 return self.load_all_kv_files() def load_all_kv_files(self): sm = MDScreenManager() sm.add_widget(Builder.load_file('login.kv')) sm.add_widget(Builder.load_file('home.kv')) # 设置默认显示登录页 sm.current = 'shop' return sm ShopApp().run()
2. 修正登录页kv文件的按钮事件
将"Sign Up"按钮的on_press事件改为使用root.manager,避免未定义变量错误:
# 替换原Sign Up按钮的on_press行 on_press: root.manager.current = 'sign_up'
注:若尚未创建
sign_up页面,需后续补充对应的kv文件并添加到ScreenManager中,否则切换时会报错。
内容的提问来源于stack exchange,提问作者Signore
相关产品推荐
相关产品推荐

