Kivy 应用程序在 Android(Android 13)上启动后崩溃,我在 google colab 中构建了它

问题描述 投票:0回答:1
    Traceback (most recent call last):
     File "kivy/properties.pyx", line 961, in kivy.properties.ObservableDict.__getattr__
   KeyError: '_left_container'
   
   During handling of the above exception, another exception occurred:
   
   Traceback (most recent call last):
     File "/content/.buildozer/android/app/main.py", line 98, in <module>
     File "/content/.buildozer/android/platform/build-arm64-v8a_armeabi-v7a/build/python-installs/myapp/arm64-v8a/kivy/app.py", line 955, in run
     File "/content/.buildozer/android/platform/build-arm64-v8a_armeabi-v7a/build/python-installs/myapp/arm64-v8a/kivy/app.py", line 925, in _run_prepare
     File "/content/.buildozer/android/app/main.py", line 75, in build
     File "/content/.buildozer/android/platform/build-arm64-v8a_armeabi-v7a/build/python-installs/myapp/arm64-v8a/kivy/lang/builder.py", line 407, in load_string
     File "/content/.buildozer/android/platform/build-arm64-v8a_armeabi-v7a/build/python-installs/myapp/arm64-v8a/kivy/lang/builder.py", line 662, in _apply_rule
     File "/content/.buildozer/android/platform/build-arm64-v8a_armeabi-v7a/build/python-installs/myapp/arm64-v8a/kivy/lang/builder.py", line 662, in _apply_rule
     File "/content/.buildozer/android/platform/build-arm64-v8a_armeabi-v7a/build/python-installs/myapp/arm64-v8a/kivy/lang/builder.py", line 660, in _apply_rule
     File "/content/.buildozer/android/platform/build-arm64-v8a_armeabi-v7a/build/python-installs/myapp/arm64-v8a/kivy/uix/widget.py", line 470, in apply_class_lang_rules
     File "/content/.buildozer/android/platform/build-arm64-v8a_armeabi-v7a/build/python-installs/myapp/arm64-v8a/kivy/lang/builder.py", line 540, in apply
     File "/content/.buildozer/android/platform/build-arm64-v8a_armeabi-v7a/build/python-installs/myapp/arm64-v8a/kivy/lang/builder.py", line 659, in _apply_rule
     File "/content/.buildozer/android/platform/build-arm64-v8a_armeabi-v7a/build/python-installs/myapp/arm64-v8a/kivymd/uix/list/list.py", line 1206, in add_widget
     File "kivy/properties.pyx", line 964, in kivy.properties.ObservableDict.__getattr__
   AttributeError: 'super' object has no attribute '__getattr__'. Did you mean: '__setattr__'?
  Python for android ended.

这是一个小应用程序,您可以在其中选择项目然后将它们发送到服务器

main.py:

import requests
import json
from kivy.lang import Builder
from kivymd.app import MDApp
from kivymd.toast import toast

KV = """
<CB@TwoLineAvatarIconListItem>:
    IconLeftWidget:
        id: i1
        icon: "pencil"
    IconRightWidget:
        icon: "pencil" #this is a transparent png image of 188 bytes
        MDCheckbox:
            id: x54
            on_active:
                app.save_checked(*args,root.text,root.secondary_text,root.ids.i1.icon,root)

BoxLayout:
    size_hint:[.8, .9]
    ScrollView:
        MDList:
            id: scroll
            CB:
                text: "box"
                secondary_text: "1"
                icon: "pencil"
            CB:
                text: "garbage"
                secondary_text: "2"
                icon: "pencil"
            CB:
                text: "car"
                secondary_text: "3"
                icon: "pencil"

    MDRaisedButton:
        id: cm
        text: "Save"
        on_release: app.send()
"""


class MainApp(MDApp):
    def __init__(self, **kwargs):
        super().__init__(**kwargs)
        self.data = []

    def build(self):
        return Builder.load_string(KV)

    def save_checked(self, checkbox, value, a, b, c, w):
        # a - text
        # b - secondary_text
        # value - state(True/False) on and off
        # c - icon
        # checkbox and w idk, just kivy args
        if value:
            print(checkbox, value, a, b, c, w)
            self.data.append(b)
        else:
            self.data.remove(b)

    def send(self):
        #send data with requests
        pass


MainApp().run()

buildozer.spec:

requirements = python3,kivy==2.2.0,kivymd,urllib3, requests, chardet, certifi, idna,
osx.python_version = 3
osx.kivy_version = 1.9.1
android.permissions = android.permission.INTERNET
android.api = 33
android.minapi = 21

在电脑上一切正常,除了构建中的 kivy 版本是 2.1.0 而不是 2.2.0 当我尝试搜索所有内容都指向以错误的方式使用小部件的 id 时(正如我所理解的),但我无法弄清楚任何事情,因为在电脑上一切正常 这只是我找到的链接,没有帮助: StackOverFlow 类似问题

kivy kivymd buildozer
1个回答
0
投票

您可能正在尝试将应用程序升级到较新的 kivy/kivymd 版本,或者您正在处理非常旧的代码,因为“IconLeftWidget”和“IconRightWidget”不是 kivy/kivymd 2.1x/2.2x 对象。它们是 kivymd==1.1.1 对象。或者您在您的电脑和 Android 设备上使用不同的 kivymd 版本。检查您的 kivymd 版本并升级您的对象。

© www.soinside.com 2019 - 2024. All rights reserved.