Kivy:App.root 中的无效实例
问题描述
我是 Python 和 Kivy 的新手,这是我的第一个小项目,不知道我做错了什么,以下是来自 pydev(eclipse) 的日志:
I am new to Python as well as Kivy, this is my first small project, and don't know what I did wrong, following is the log from pydev(eclipse):
[INFO ] Kivy v1.8.0
[INFO ] [Logger ] Record log in C:UsersSudheer.kivylogskivy_14-06-21_10.txt
[INFO ] [Factory ] 157 symbols loaded
[DEBUG ] [Cache ] register <kv.lang> with limit=None, timeout=Nones
[DEBUG ] [Cache ] register <kv.image> with limit=None, timeout=60s
[DEBUG ] [Cache ] register <kv.atlas> with limit=None, timeout=Nones
[INFO ] [Image ] Providers: img_tex, img_dds, img_pygame, img_gif (img_pil ignored)
[DEBUG ] [Cache ] register <kv.texture> with limit=1000, timeout=60s
[DEBUG ] [Cache ] register <kv.shader> with limit=1000, timeout=3600s
[INFO ] [Text ] Provider: pygame
[DEBUG ] [Cache ] register <kv.loader> with limit=500, timeout=60s
[INFO ] [Loader ] using a thread pool of 2 workers
[DEBUG ] [Cache ] register <textinput.label> with limit=None, timeout=60.0s
[DEBUG ] [Cache ] register <textinput.width> with limit=None, timeout=60.0s
[DEBUG ] [App ] Loading kv <D:OS FilesworkspaceKalSrcmyclass.kv>
[DEBUG ] [App ] kv <D:OS FilesworkspaceKalSrcmyclass.kv> not found
[CRITICAL ] App.root must be an _instance_ of Widget
Traceback (most recent call last):
File "D:OS FilesworkspaceKal\__main__.py", line 9, in <module>
MyClass().run()
File "C:Kivy180kivykivyapp.py", line 772, in run
raise Exception('Invalid instance in App.root')
Exception: Invalid instance in App.root
代码文件结构如下:
代码如下:文件:main.py
Codes are as follows: File:main.py
from Src.AppStart import MyClass
if __name__ == '__main__':
MyClass().run()
文件:AppStart.py:
File:AppStart.py:
from kivy.app import App
from Src.Logins.LoginForm import LoginForm
from kivy.uix.button import Button
class MyClass(App):
'''
classdocs
'''
def build(self):
c=LoginForm
#c=Button(text="Checked")
return c
文件:LoginForm.py:
File:LoginForm.py:
from kivy.uix.gridlayout import GridLayout
from kivy.graphics import Color
from kivy.uix.label import Label
from kivy.uix.textinput import TextInput
class LoginForm(GridLayout):
'''
classdocs
'''
def __init__(self, **kwargs):
#kwargs['cols'] = 1
#Layout=GridLayout(cols=2, rows=3, background_color=Color(1,1,1))
self.cols=2
self.rows=3
self.background_color=Color(1,1,1)
IDlbl =Label(text="User ID: ")
PWlbl =Label(text="Password: ")
IDtxtbox = TextInput(text="",multiline=False)
PWtxtbox = TextInput(text="",multiline=False, password=True)
self.add_widget(IDlbl)
self.add_widget(PWlbl)
self.add_widget(IDtxtbox)
self.add_widget(PWtxtbox)
#return Layout
super(LoginForm, self).__init__(**kwargs)
能否请您告诉我为什么 App.root 是无效实例,
Could you please let me know why is App.root is an invalid instance,
解决方案
App.build()
的返回值赋值为App.root
.在您的 build()
中,您返回一个类 (LoginForm
) 而不是该类的实例.只需将 build()
中的那一行更改为 c = LoginForm()
即可修复它.
The return value of App.build()
is assigned as App.root
. In your build()
you return a class (LoginForm
) instead of an instance of the class. Simply changing that line in build()
to c = LoginForm()
should fix it.
相关文章