Python Kivy运行报Invalid instance in App.root错误如何解决?
错误原因分析
Exception('Invalid instance in App.root')
- Kivy框架中App类的
build方法需要返回继承自Widget类的实例对象作为根组件,你当前代码中build方法返回的是layout类本身,没有进行实例化操作,不符合Kivy的参数要求,因此触发该异常。 - 额外隐藏问题:你自定义的
layout类中仅创建了用户名、密码输入框对象,没有调用add_widget方法将两个输入框添加到布局中,即使解决实例化问题后运行也不会显示输入框组件。
解决方案
- 修改
Myapp类的build方法,将返回的layout类改为实例化后的对象,即把return layout改为return layout() - 在
layout类的__init__方法末尾补充添加输入框到布局的代码:
self.add_widget(self.username) self.add_widget(self.password)
(可选优化:给密码输入框添加password=True参数,输入内容会自动隐藏,符合密码框使用习惯)
修正后完整可运行代码
import kivy from kivy.app import App from kivy.uix.label import Label from kivy.uix.gridlayout import GridLayout from kivy.uix.textinput import TextInput class layout(GridLayout): def __init__(self, **kwargs): super(layout, self).__init__(**kwargs) self.cols = 2 self.add_widget(Label(text="Username= ")) self.username = TextInput(multiline=False) self.add_widget(self.username) self.add_widget(Label(text="Password= ")) self.password = TextInput(multiline=False, password=True) self.add_widget(self.password) class Myapp(App): def build(self): return layout() if __name__== "__main__": Myapp().run()
内容的提问来源于stack exchange,提问作者Atishay Ritul Patwa
相关产品推荐
相关产品推荐

