Kivy使用ScreenManager跨屏幕传递输入值问题求助
问题原因
你的代码存在两个核心错误导致第三屏无法拿到第一屏的姓名:
- Screen类访问所属的ScreenManager应该用
self.manager属性,你写的self.root并不存在,调用会直接报错 get_screen()方法的入参是你在KV中给对应Screen设置的name属性值,你第一屏的name是romain,不是类名FirstWindow,传错参数找不到对应屏幕
修复代码
只需要修改Python中ThirdWindow类的on_press方法即可:
class ThirdWindow(Screen): def on_press(self): # 替换原错误逻辑即可 self.ids.recup_infos.text = self.manager.get_screen('romain').ids.my_name.text
优化建议(可选)
更推荐你把跨屏共享的数据存在App实例上,降低页面耦合度,后续修改页面配置也不会影响数据传递:
- 给App类加共享属性:
from kivy.properties import StringProperty class AwesomeApp(App): # 定义共享的姓名字段 user_name = StringProperty('') def build(self): Window.clearcolor = (0,0,0,0) return kv
- 第一屏保存姓名时直接存到App实例:
class FirstWindow(Screen): def envoyer(self): name = self.ids.nom_input.text self.ids.my_name.text = name # 存到App全局 App.get_running_app().user_name = name
- 第三屏直接从App实例取数据:
class ThirdWindow(Screen): def on_press(self): self.ids.recup_infos.text = App.get_running_app().user_name
内容的提问来源于stack exchange,提问作者Romain Plantureux
相关产品推荐
相关产品推荐

