[Python] kivymd MDDropDownMenu class is not recognized on Android

Discussão em 'Python' iniciado por Stack, Dezembro 6, 2024.

  1. Stack

    Stack Membro Participativo

    Im working on my budged app. it adds a row to my yearly budged plan I have no problems on Windows and Linux Mint, only after converting to .apk for Android it no longer recognizes a class in the dropdown menu.

    here is the .kv file:

    Screen:
    MDBoxLayout:
    adaptive_height: True
    padding: 40
    spacing: 20
    orientation: "vertical"

    MDLabel:
    text: "budged_app"
    halign: "center"

    MDLabel:
    id: today_label
    text: "Date: "

    MDLabel:
    text: "Description: "

    MDTextField:
    id: description_input
    text: ""
    MDLabel:
    text: "Category: "

    MDButton:
    id: category_selector
    # pos_hint: {"top": .98}
    # x: "12dp"
    pos_hint: {"center_x": .5, "center_y": .1}
    icon: "menu"
    on_release: app.open_menu()

    MDButtonText:
    id: category
    text: "Sonstiges"


    MDLabel:
    text: "Expense: "

    MDTextField:
    id: expense_input
    text: ""

    MDButton:
    id: upload_input
    on_press: app.upload()
    style: "elevated"
    pos_hint: {"center_x": .5, "center_y": .1}

    MDButtonIcon:
    icon: "plus"

    MDButtonText:
    text: "Upload"


    and here is the main.py:

    import gspread
    from google.oauth2.service_account import Credentials
    from datetime import date

    from kivy.lang import Builder
    from kivymd.app import MDApp
    from kivymd.uix.menu import MDDropdownMenu

    categories = {"c1": "Lebensbedarf",
    "c2": "Anschaffungen",
    "c3": "Freizeit",
    "c4": "Auto",
    "c5": "Spende",
    "c6": "Geschenke",
    "c7": "Garten",
    "c8": "Sonstiges"}


    class BudgedApp(MDApp):
    def on_start(self):
    self.root.ids.today_label.text = "Date: " + str(date.today().strftime('%y/%m/%d'))

    self.menu_items = [
    {
    "text": f"{code}",
    "on_release": lambda x=f"{code}": self.set_category(x)
    }
    for code in categories.values()
    ]

    def open_menu(self):
    self.menu = MDDropdownMenu(
    caller=self.root.ids.category_selector,
    items=self.menu_items,
    position="center")
    self.menu.open()

    def set_category(self, category):
    self.root.ids.category.text = category
    self.menu.dismiss()

    def clear(self):
    self.root.ids.description_input.text = ""
    self.root.ids.expense_input.text = ""
    self.root.ids.category.text = "Sonstiges"

    def upload(self):
    try:
    float(self.root.ids.expense_input.text)
    except ValueError:
    self.root.ids.expense_input.text = "incorrect entry!"
    return

    def next_available_row(work_sheet: gspread.Worksheet):
    str_list = list(filter(None, work_sheet.col_values(1)))
    return str(len(str_list) + 1)

    scopes = [
    "https://www.googleapis.com/auth/spreadsheets"
    ]

    creds = Credentials.from_service_account_file(filename="assets/credentials.json", scopes=scopes)
    client = gspread.authorize(creds)

    sheet = client.open_by_key("#############################################")
    variable_expenses = sheet.get_worksheet(3)

    # value_list = sheet.sheet1.row_values(50)

    next_row = next_available_row(variable_expenses)

    today = date.today().strftime('%y/%m/%d')
    variable_expenses.update_acell("A{}".format(next_row), str(today))

    variable_expenses.update_acell("B{}".format(next_row), self.root.ids.description_input.text)
    variable_expenses.update_acell("C{}".format(next_row), self.root.ids.category.text)

    variable_expenses.update_acell("E{}".format(next_row), value=float(self.root.ids.expense_input.text))

    self.clear()

    def build(self):
    self.theme_cls.theme_style = "Dark"
    self.theme_cls.primary_palette = "Gray"
    return Builder.load_file("budged_app_theme.kv")


    if __name__ == "__main__":
    BudgedApp().run()


    here is an excerpt from the buildozer.spec (probably more in there than I need...):

    requirements = python3,kivy,kivymd,gspread,oauth2client,httplib2,pyopenssl,google-auth-oauthlib,pyasn1,pyasn1-modules,rsa,requests,google-auth-httplib2,openssl,google-api-python-client,google-auth,credentials,oauth2,google,cachetools,urllib3,chardet,idna,requests_oauthlib,oauthlib,pyparsing



    Here's a snippet from the logcat:

    It could be due to the order, meaning that something is called before it has been defined. But unfortunately I can't figure it out.

    Continue reading...

Compartilhe esta Página