You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

KivyMD-Python移动端应用跳转至第二个界面时崩溃求助

KivyMD移动端应用跳转界面崩溃问题

我是KivyMD和Python的新手,开发了一款移动端应用。通过Colab-Buildozer生成APK文件后,安装到手机后主界面可正常打开,但点击进入可执行操作的第二个界面时应用崩溃。该应用在PC端PyCharm中运行完全正常。若需更多信息请告知,感谢帮助。

已尝试的解决方法

  • 修改buildozer配置文件,无改善
  • 调试应用,无改善
  • 查阅网络资料,未找到解决方案

MAIN.PY

from kivy.core.window import Window
from kivy.lang import Builder
from kivy.properties import ObjectProperty, Clock
from kivy.uix.screenmanager import ScreenManager, Screen
from kivymd.app import MDApp
from kivymd.icon_definitions import md_icons
from kivymd.uix.button import MDRaisedButton, MDFlatButton
from kivymd.uix.dialog import MDDialog
from kivymd.uix.list import OneLineListItem

class MainWindow(Screen):

    #Window.size = (480, 700)
    start_application=ObjectProperty(None)



class ShoppingWindow(Screen):
    #Window.size = (480, 700)
    fruit_vegetables_value=ObjectProperty(None)
    fruit_vegetables_Okbutton=ObjectProperty(None)
    bread_value=ObjectProperty(None)
    bread_OKButton=ObjectProperty(None)
    pasta_value=ObjectProperty(None)
    pasta_OKButton=ObjectProperty(None)
    delete_cart=ObjectProperty(None)
    delete_veg_value=ObjectProperty(None)
    delete_bread_value=ObjectProperty(None)
    delete_pasta_value=ObjectProperty(None)
    cleanser_Okbutton=ObjectProperty(None)
    delete_cleanser_value = ObjectProperty(None)
    fish_Okbutton=ObjectProperty(None)
    delete_fish_value=ObjectProperty(None)
    fish_value=ObjectProperty(None)
    meat_Okbutton=ObjectProperty(None)
    meat_value=ObjectProperty(None)
    delete_meat_value=ObjectProperty(None)
    freezer_value=ObjectProperty(None)
    freezer_Okbutton=ObjectProperty(None)
    delete_freezer_value=ObjectProperty(None)
    cheese_value=ObjectProperty(None)
    cheese_Okbutton=ObjectProperty(None)
    delete_cheese_value=ObjectProperty(None)
    cookies_value = ObjectProperty(None)
    cookies_Okbutton = ObjectProperty(None)
    delete_cookies_value = ObjectProperty(None)

    def fruit_vegetables(self):
        data_file = open("data_file.txt", "a+")
        data_file.write(self.fruit_vegetables_value.text+'\n')
    def bread(self):
        global entry
        entry=1
        data_file = open("data_file.txt", "a+")
        data_file.write(self.bread_value.text + '\n')
    def pasta(self):
        data_file = open("data_file.txt", "a+")
        data_file.write(self.pasta_value.text + '\n')
    def cleanser(self):
        data_file = open("data_file.txt", "a+")
        data_file.write(self.cleanser_value.text + '\n')
    def fish(self):
        data_file = open("data_file.txt", "a+")
        data_file.write(self.fish_value.text + '\n')
    def meat(self):
        data_file = open("data_file.txt", "a+")
        data_file.write(self.meat_value.text + '\n')
    def freezer(self):
        data_file = open("data_file.txt", "a+")
        data_file.write(self.freezer_value.text + '\n')
    def cheese(self):
        data_file = open("data_file.txt", "a+")
        data_file.write(self.cheese_value.text + '\n')
    def cookies(self):
        data_file = open("data_file.txt", "a+")
        data_file.write(self.cookies_value.text + '\n')
    def delete_veg_value_func(self):
        self.fruit_vegetables_value.text=""
    def delete_cookies_value_func(self):
        self.fruit_vegetables_value.text=""
    def delete_bread_value_func(self):
        self.bread_value.text=""
    def delete_pasta_value_func(self):
        self.pasta_value.text=""
    def delete_cleanser_value_func(self):
        self.cleanser_value.text=""
    def delete_fish_value_func(self):
        self.fish_value.text=""
    def delete_meat_value_func(self):
        self.meat_value.text=""
    def delete_freezer_value_func(self):
        self.freezer_value.text=""
    def delete_cheese_value_func(self):
        self.cheese_value.text=""



class WindowManager(ScreenManager):
    pass

sm=ScreenManager()
sm.add_widget(MainWindow(name="MainWindow"))
sm.add_widget(ShoppingWindow(name="ShoppingWindow"))

class CartShow(OneLineListItem):
    pass

class CartWindow(Screen):
    scroll=ObjectProperty(None)
    refresh=ObjectProperty(None)
    back_to_home=ObjectProperty(None)
    refresh_cart=ObjectProperty(None)

    def on_enter(self):
        global x
        self.dialog = MDDialog(
            text="Click on an item to remove it from list and confirm with refresh!",
            buttons=[
                MDFlatButton(
                    text="OK",
                    theme_text_color="Custom",
                    text_color="black",
                    on_release=lambda _: self.dialog.dismiss())
            ]
        )

        self.dialog.open()
        with open("data_file.txt", 'r') as fp:
            x = len(fp.readlines())

    def refresh(self):

        with open("data_file.txt", 'r') as fp:
            q = len(fp.readlines())

            self.ids.scroll.clear_widgets()


            file= open("data_file.txt" , "r")
            i=0
            for line in file:
                i=i+1
                icons = list(md_icons.keys())
                self.ids.scroll.add_widget(
                    CartShow(text=f"{line}",on_release=self.erase_list_item))


    def erase_list_item(self,OneLineListItem):

        with open("data_file.txt", "r+") as f:
            d = f.readlines()
            f.seek(0)
            for k in d:
                if k != OneLineListItem.text:
                    f.write(k)
            f.truncate()

        self.ids.scroll.clear_widgets()

        file = open("data_file.txt", "r")
        i = 0
        for line in file:
            i = i + 1
            self.ids.scroll.add_widget(
                CartShow(text=f"{line}",on_release=self.erase_list_item))



class MainApp(MDApp):

    def build(self):
        self.theme_cls.theme_style = "Light"
        self.theme_cls.primary_palette = "Blue"
        ww = Builder.load_file("Layout.kv")
        return ww
        return sm

MainApp().run()

buildozer.spec - 修改部分

[app]

# (str) Title of your application
title = "My Application"

# (str) Package name
package.name = "myapp"

# (str) Package domain (needed for android/ios packaging)
package.domain = "org.test"

# (str) Source code where the main.py live
source.dir = "."

# (list) Source files to include (let empty to include all the files)
source.include_exts = "py,png,jpg,kv,atlas,txt,gif"

# (list) List of inclusions using pattern matching
#source.include_patterns = assets/*,images/*.png

# (list) Source files to exclude (let empty to not exclude anything)
#source.exclude_exts = spec

# (list) List of directory to exclude (let empty to not exclude anything)
#source.exclude_dirs = tests, bin, venv

# (list) List of exclusions using pattern matching
# Do not prefix with './'
#source.exclude_patterns = license,images/*/*.jpg

# (str) Application versioning (method 1)
version = "0.1"

# (str) Application versioning (method 2)
# version.regex = __version__ = ['"](.*)["']
# version.filename = %(source.dir)s/main.py

# (list) Application requirements
# comma separated e.g. requirements = sqlite3,kivy
requirements = "python3,kivy==2.1.0,kivymd,pillow"

# (str) Custom source folders for requirements
# Sets custom source for any requirements with recipes
# requirements.source.kivy = ../../kivy

# (str) Presplash of the application
#presplash.filename = %(source.dir)s/data/presplash.png

# (str) Icon of the application
#icon.filename = %(source.dir)s/data/icon.png

# (str) Supported orientation (one of landscape, sensorLandscape, portrait or all)
orientation = "portrait"

# (list) List of service to declare
#services = NAME:ENTRYPOINT_TO_PY,NAME2:ENTRYPOINT2_TO_PY

#
# OSX Specific
#

#
# author = © Copyright Info

# change the major version of python used by the app
osx.python_version = 3

# Kivy version to use
osx.kivy_version = 2.1.0

内容的提问来源于stack exchange,提问作者Frenk9405

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.08 22:05:27