Kivi Python kv文件错误 - 布局未触发

2024-06-26 00:14:35 发布

您现在位置:Python中文网/ 问答频道 /正文

我对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...

结构:

File & Folder Structure

文件:主.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')
  1. 我试过了Builder.load_文件,添加“UserIDtxt:UserIDtxt”到kv文件显示为错误,请告诉我错误在哪里。另外,根据kivi规范,它应该自动加载kv文件,如果文件名是小写字母,为什么我要再次使用builder类。在
  2. 另外,当我注释掉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.

Tags: 文件nopyinfoloopuibaseapplication
1条回答
网友
1楼 · 发布于 2024-06-26 00:14:35

1)您的加载_文件位于错误的位置(由于其他问题,您实际上还没有看到此错误)

super(LoginForm, self).__init__(**kwargs)
Builder.load_file('ui/loginform.kv')

在小部件的正常__init__方法中应用小部件的任何kv文件定义,在这里用super调用该方法。由于您只尝试在之后加载kv文件,因此kivy不知道您的规则,因此(根据警告消息)布局不会触发。在

您可以将load_file放在super之上,但更简单的方法是在应用程序开始时加载所有的kv文件(例如,作为build期间的第一件事),或者将它们放在默认的kv文件中,如下所述。性能影响很小,如果重要的话,可以稍后更改。在

编辑:也许你误解了加载的作用——它只从kv文件加载小部件定义,而不将它们应用于任何小部件。只有当小部件被实例化时才会发生这种情况,这就是为什么需要首先加载文件。在


2)您的UserIDtxt属性不应为大写

Kivy语言使用第一个字母的大小写来确定一行是引用属性还是子控件。在本例中,它认为它是一个子小部件(因为小部件类名应该以大写字母开头),所以您的语法是错误的。在


3)您的自动加载问题:

Also, as per kivi specifications, it should load the kv file automatically if filename is same in small letters

Kivy将自动尝试加载一个基于你的App类的小写形式的名称的单个kv文件(如果存在的话不带App后缀)。在本例中,您的app类是MyApp,因此kivy将尝试加载my.kv,它不存在。在

相关问题 更多 >