如何在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
相关产品推荐
相关产品推荐

