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
相关产品推荐
相关产品推荐

