【问题标题】:Python classes imported in .kv file are not identified and throws error.kv 文件中导入的 Python 类无法识别并引发错误
【发布时间】:2022-10-14 19:48:21
【问题描述】:

如果我问一个幼稚的问题,请原谅我,因为我是 Kivy 的新手。

在我的 Kivy 应用程序中,我导入了一些 python 类和 kv 小部件。这些在我的本地运行良好,但是当我将应用程序转换为 apk 并尝试在我的 android 上打开时抛出错误。这是我打开 python 应用程序时的错误

无法从 libs.baseclass.main_screen.SplashScreen 导入 SplashScreen

如果我将导入语句更改为

#: import SplashScreen libs.baseclass.main_screen

然后我得到以下错误

AttributeError:模块“libs.baseclass”没有属性“main_screen”

这是我的 main.kv 文件

#:kivy 2.1.0

#: import SplashScreen libs.baseclass.main_screen.SplashScreen
#: import LoginScreen libs.baseclass.main_screen.LoginScreen
#: import SignupScreen libs.baseclass.main_screen.SignupScreen
#: import TopicsScreen libs.baseclass.main_screen.TopicsScreen
#: import SubTopicsScreen libs.baseclass.main_screen.SubTopicsScreen

#: include libs/kvs/splash_screen.kv
#: include libs/kvs/login_screen.kv
#: include libs/kvs/signup_screen.kv
#: include libs/kvs/topics_screen.kv
#: include libs/kvs/sub_topics_screen.kv


ScreenManager:
    SplashScreen:
    LoginScreen:
    SignupScreen:
    TopicsScreen:
    SubTopicsScreen:

我的项目结构如下:

    Myapp
      - libs
        - baseclass
          - main_screen.py (this files contains all the classes imported in main.kv file )
        - kvs
           All the .kv files defining screens are here.
      - main.kv
      - main.py

你能帮我找出问题所在吗?

【问题讨论】:

    标签: python kivy kivy-language kivymd buildozer


    【解决方案1】:

    查看您共享的代码,似乎问题可能来自模块名称,即 main_screen。

    根据PEP8 documentation

    模块应该有简短的全小写名称。如果提高可读性,可以在模块名称中使用下划线。 Python 包也应该有简短的全小写名称,尽管不鼓励使用下划线。

    尝试从模块名称中删除下划线,类似于 mainscreen.py。这可能会奏效。

    其他方法可以在 libs.baseclass 中创建 init 文件,并在此 init 文件中从 main_screen.py 导入类。因此,在 .kv 文件中,您必须从没有下划线的 libs.baseclass 导入类。虽然这种方法没有经过测试,但值得一试。

    【讨论】:

      猜你喜欢
      • 2020-12-17
      • 1970-01-01
      • 1970-01-01
      • 2023-02-01
      • 2023-03-27
      • 1970-01-01
      • 2021-01-13
      • 2016-12-25
      • 2021-04-01
      相关资源
      最近更新 更多