Anonymous
Класс kivymd MDDropDownMenu не распознается на Android
Сообщение
Anonymous » 05 дек 2024, 19:08
Я работаю над своим бюджетным приложением.
Это добавляет ряд к моему годовому бюджетному плану.
У меня нет проблем с Windows и Linux Mint, только
после преобразования в .apk для Android нет. больше распознает класс в раскрывающемся меню .
вот файл .kv:
Код: Выделить всё
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"
а вот 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()
вот выдержка из buildozer.spec
(наверное, там больше, чем мне нужно...):
Код: Выделить всё
requirements = python3,kivy,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
Вот фрагмент логарифма:
Это может быть связано с порядком, означающим, что что-то вызывается до того, как оно было определено. Но, к сожалению, я не могу этого понять.
Подробнее здесь:
https://stackoverflow.com/questions/792 ... on-android
1733414887
Anonymous
Я работаю над своим бюджетным приложением. Это добавляет ряд к моему годовому бюджетному плану. У меня нет проблем с Windows и Linux Mint, только [b]после преобразования в .apk для Android нет. больше распознает класс в раскрывающемся меню[/b]. вот файл .kv: [code]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" [/code] а вот main.py: [code]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() [/code] вот выдержка из buildozer.spec (наверное, там больше, чем мне нужно...): [code]requirements = python3,kivy,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 [/code] Вот фрагмент логарифма: Это может быть связано с порядком, означающим, что что-то вызывается до того, как оно было определено. Но, к сожалению, я не могу этого понять. Подробнее здесь: [url]https://stackoverflow.com/questions/79255392/kivymd-mddropdownmenu-class-is-not-recognized-on-android[/url]