You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

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实例上,降低页面耦合度,后续修改页面配置也不会影响数据传递:

  1. 给App类加共享属性:
from kivy.properties import StringProperty

class AwesomeApp(App):
    # 定义共享的姓名字段
    user_name = StringProperty('')
    def build(self):
        Window.clearcolor = (0,0,0,0)
        return kv
  1. 第一屏保存姓名时直接存到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
  1. 第三屏直接从App实例取数据:
class ThirdWindow(Screen):
    def on_press(self):
        self.ids.recup_infos.text = App.get_running_app().user_name

内容的提问来源于stack exchange,提问作者Romain Plantureux

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.10.02 10:15:03