我对Python和Kivy都是新手,在我尝试的时候,我遇到了以下错误,浏览了网络,但是没有找到问题,请您在下面的代码中解释一下我的错误:
错误:
[INFO ] [Base ] Start application main loop
[WARNING ] <ui.LoginForm.LoginForm object at 0x02D503E8> have no cols or rows set, layout is not triggered.
[INFO ] [Base ] Leaving application in progress...
结构:
文件:主.py在
^{pr2}$文件:LoginForm.py在
from kivy.uix.gridlayout import GridLayout
from kivy.lang import Builder
class LoginForm(GridLayout):
'''
classdocs
'''
def __init__(self, **kwargs):
'''
Constructor
'''
super(LoginForm, self).__init__(**kwargs)
Builder.load_file('ui/loginform.kv')
另外,当我注释掉Kv文件中的“UserIDtxt:UserIDtxt”时,我会收到以下日志。在
[警告]未设置列或行,布局未触发。 [INFO][Base]正在退出应用程序。。。
谢谢。在
[编辑]: @crimement所说的一切都奏效了,谢谢。我做了如下修改: 1我添加了千伏与相同内容的文件后勤信息.kv事实上,没有变化。 2已从中删除生成语句loginForm.py: 然后我收到了以下信息:app no displaying,你能告诉我如何在kv文件中添加多个类,并让它们在各自的py文件中使用。在
[INFO ] [Base ] Start application main loop
[WARNING ] <ui.LoginForm.LoginForm object at 0x02DB1420> have no cols or rows set, layout is not triggered.
1)您的加载_文件位于错误的位置(由于其他问题,您实际上还没有看到此错误)
在小部件的正常
__init__
方法中应用小部件的任何kv文件定义,在这里用super调用该方法。由于您只尝试在之后加载kv文件,因此kivy不知道您的规则,因此(根据警告消息)布局不会触发。在您可以将
load_file
放在super
之上,但更简单的方法是在应用程序开始时加载所有的kv文件(例如,作为build
期间的第一件事),或者将它们放在默认的kv文件中,如下所述。性能影响很小,如果重要的话,可以稍后更改。在编辑:也许你误解了加载的作用——它只从kv文件加载小部件定义,而不将它们应用于任何小部件。只有当小部件被实例化时才会发生这种情况,这就是为什么需要首先加载文件。在
2)您的
UserIDtxt
属性不应为大写Kivy语言使用第一个字母的大小写来确定一行是引用属性还是子控件。在本例中,它认为它是一个子小部件(因为小部件类名应该以大写字母开头),所以您的语法是错误的。在
3)您的自动加载问题:
Kivy将自动尝试加载一个基于你的App类的小写形式的名称的单个kv文件(如果存在的话不带App后缀)。在本例中,您的app类是
MyApp
,因此kivy将尝试加载my.kv
,它不存在。在相关问题 更多 >
编程相关推荐