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

如何在App类中引用Screen类对象?程序关闭时执行代码失效求助

问题分析与解决

你代码里的核心问题是直接通过类Screeen访问ids属性——ids是Kivy控件实例的专属属性,不属于类本身,所以直接调用类的ids必然报错。

要在App的on_stop方法中获取Screen实例的输入内容,必须先拿到Screen的具体实例对象,再访问它的ids。

修改后的代码

main.py

from kivy.app import App
from kivy.lang import Builder
from kivy.uix.screenmanager import ScreenManager, Screen

class Screeen(Screen):
    pass

class Manager(ScreenManager):
    pass

kv = Builder.load_file("plann.kv")
class Ball(App):
    def on_stop(self):
        # 从根部件(ScreenManager)中获取Screeen实例
        screen = self.root.get_screen("Screeen")
        # 访问实例的ids属性获取TextInput内容
        print(screen.ids.textinput.text)

    def build(self):
        return kv

if __name__ == "__main__":
    Ball().run()

plann.kv

你的kv文件无需修改,已经正确给Screeen设置了name属性并绑定了textinput的id:

Manager:
    Screeen:

<Screeen>:
    name: "Screeen"
    textinput: textinput
    FloatLayout:
        size: root.width, root.height
        TextInput:
            id: textinput
            text: "hi"
            size_hint: (.45, .1)
            pos: root.width * 1 / 3 , root.height * 1 / 2

关键说明

  • self.root指向App的根部件,也就是你在build方法返回的ScreenManager实例。
  • get_screen("Screeen")通过kv中设置的name属性,从ScreenManager里定位到对应的Screen实例。
  • 拿到实例后,就能正常通过screen.ids.textinput.text获取输入框的内容。

内容的提问来源于stack exchange,提问作者SerJo Kyzin

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.30 16:00:09