【发布时间】:2021-11-10 21:37:11
【问题描述】:
这是我用于转换的 main.py 文件。
from kivymd.app import MDApp
from kivy.lang import Builder
from kivy.uix.boxlayout import BoxLayout
from kivy.properties import ObjectProperty, StringProperty
from kivymd.uix.navigationdrawer import MDNavigationDrawer
from kivymd.uix.navigationdrawer import MDNavigationLayout
from kivy.uix.screenmanager import Screen, ScreenManager
from kivy.core.window import Window
from kivymd.uix.datatables import MDDataTable
from kivy.metrics import dp
from kivy.uix.anchorlayout import AnchorLayout
from kivymd.uix.dialog import MDDialog
from kivymd.uix.button import MDRaisedButton
from kivymd.theming import ThemableBehavior
from kivymd.uix.picker import MDDatePicker
from kivymd.uix.list import OneLineListItem
from kivymd.uix.menu import MDDropdownMenu
Window.size = (360, 640)
class AssetTypeDropItem(OneLineListItem):
pass
class ActionDropItem(OneLineListItem):
pass
class AssetNameDropItem(OneLineListItem):
pass
class AddInvestmentScreen(Screen):
menu1 = None
menu2 = None
menu3 = None
def __init__(self, **kwargs):
super(AddInvestmentScreen, self).__init__(**kwargs)
def on_enter(self, *args):
asset_type_list = ["Select Asset", "Digital Gold"]
action_list = ["Buy", "Sell"]
asset_name = ["test"]
asset_type_dropdown_items = [
{
"viewclass": "AssetTypeDropItem",
"height": dp(40),
"text": f"{i}",
"on_release": lambda x=f"{i}": self.set_item_assettype(x),
}
for i in asset_type_list
]
self.menu1 = MDDropdownMenu(
caller=self.ids.asset_type_dropdown,
items=asset_type_dropdown_items,
position="bottom",
width_mult=2,
)
action_dropdown_items = [
{
"viewclass": "ActionDropItem",
"height": dp(40),
"text": f"{i}",
"on_release": lambda x=f"{i}": self.set_item_action(x),
}
for i in action_list
]
self.menu2 = MDDropdownMenu(
caller=self.ids.action_dropdown,
items=action_dropdown_items,
position="bottom",
width_mult=2,
)
asset_name_dropdown_items = [
{
"viewclass": "AssetNameDropItem",
"height": dp(40),
"text": f"{i}",
"on_release": lambda x=f"{i}": self.set_item_asset_name(x),
}
for i in asset_name
]
self.menu3 = MDDropdownMenu(
caller=self.ids.asset_name,
items=asset_name_dropdown_items,
position="bottom",
width_mult=4,
)
def set_item_assettype(self, text_item):
self.ids.asset_type_dropdown.set_item(text_item)
self.menu1.dismiss()
def set_item_action(self, text_item):
self.ids.action_dropdown.set_item(text_item)
self.menu2.dismiss()
def set_item_asset_name(self, text_item):
self.ids.asset_name.text = text_item
self.menu3.dismiss()
def date_picker(self):
dialog =MDDatePicker()
dialog.bind(on_save=self.set_previous_date)
dialog.open()
def set_previous_date(self, instance, value, date_rang):
self.ids.date_picker_label.text = (
f"{value.day}.{value.month}.{value.year}"
)
class DashboardScreen(Screen):
pass
class DigitalGoldScreen(Screen):
def load_table(self):
layout = AnchorLayout()
self.data_tables = MDDataTable(
pos_hint={"center_x": .5, "center_y": .5},
size_hint=(0.9, 0.6),
column_data=[("Asset Name", dp(30)),
("Quantity", dp(20)),
("Investment", dp(20)),
("Sell Price/g", dp(20)),
("Investment Value", dp(20)),
("Profit", dp(20)),
("Profit Percent", dp(20))])
self.add_widget(self.data_tables)
return layout
def on_pre_enter(self, *args):
self.load_table()
class ContentNavigationDrawer(BoxLayout):
screen_manager = ObjectProperty()
nav_drawer = ObjectProperty()
sm = ScreenManager()
sm.add_widget(DashboardScreen(name='screen-dash'))
sm.add_widget(DigitalGoldScreen(name='screen-dgld'))
sm.add_widget(AddInvestmentScreen(name='screen-addinvestments'))
class MoneyManagerApp(MDApp, ThemableBehavior, Screen):
def __init__(self, **kwargs):
super().__init__(**kwargs)
def build(self):
pass
if __name__ == "__main__":
MoneyManagerApp().run()
这是 .kv 文件。
Screen:
MDToolbar:
id: toolbar
pos_hint: {"top": 1}
elevation: 10
title: "Dashboard"
left_action_items: [["menu", lambda x: nav_drawer.set_state("open")]]
MDNavigationLayout:
ScreenManager:
id: screen_manager
DashboardScreen:
DigitalGoldScreen:
AddInvestmentScreen:
MDNavigationDrawer:
id: nav_drawer
ContentNavigationDrawer:
screen_manager: screen_manager
nav_drawer: nav_drawer
<AssetTypeDropItem>:
text: root.text
<AddInvestmentScreen>:
name: 'screen-addinvestments'
MDBoxLayout:
spacing: "20dp"
orientation: "vertical"
adaptive_size: True
pos_hint: {"center_x":.5, "center_y":.5}
MDBoxLayout:
orientation: "vertical"
adaptive_size: True
spacing: "24dp"
MDRaisedButton:
text: "Select Investment Date"
on_release: root.date_picker()
MDLabel:
id: date_picker_label
adaptive_size: False
halign: "center"
text: "01.01.20"
MDDropDownItem:
id: asset_type_dropdown
text: "Select Asset"
current_item: "Select Asset"
on_release: root.menu1.open()
MDDropDownItem:
id: action_dropdown
text: "Select Action"
current_item: "Select Action"
on_release: root.menu2.open()
MDTextField:
id: asset_name
size_hint_x: None
width: "200dp"
hint_text: "Asset Name"
on_focus: if self.focus: root.menu3.open()
MDTextField:
id: quantity
input_filter: "float"
hint_text: "Enter quantity"
MDTextField:
id: priceperunit
input_filter: "float"
hint_text: "Enter price/unit"
<DashboardScreen>:
name: 'screen-dash'
MDFloatingActionButton:
icon: "plus"
elevation: 8
pos_hint: {"center_x": .85, "center_y":.1}
on_press:
root.manager.current = "screen-addinvestments"
app.root.ids.toolbar.title = "Add Investments"
<DigitalGoldScreen>:
name: 'screen-dgld'
MDRectangleFlatButton:
text: 'Back'
pos_hint: {'center_x':0.5,'center_y':0.1}
on_press: root.manager.current = 'screen-dash'
MDIconButton:
icon: "refresh"
elevation:10
pos_hint: {"center_x": .9, "center_y": .85}
user_font_size: "40sp"
<ContentNavigationDrawer>:
ScrollView:
MDList:
OneLineListItem:
text: "Digital Gold"
on_press:
root.nav_drawer.set_state("close")
root.screen_manager.current = "screen-dgld"
app.root.ids.toolbar.title = "Digital Gold"
OneLineListItem:
text: "Dashboard"
on_press:
root.nav_drawer.set_state("close")
root.screen_manager.current = "screen-dash"
app.root.ids.toolbar.title = "Dashboard"
每当我创建一个构建并将其传输到我的任何设备时,应用程序每次启动时都会崩溃,因此永远不会启动。我正在使用所有库的最新版本,并且过去没有发生过。虽然这个应用程序基于与我之前构建应用程序的实验不同的 kivy 版本,但我认为这不是它的原因,或者也许,idk。
如果需要更多详细信息,我可以随时发布。
python 版本:3.8 kivy 版本:2.0.0
【问题讨论】:
-
尝试将 Android 设备连接到您的 PC(通过 USB)并运行
buildozer -v android debug deploy run logcat > my_log.txt。然后在文件my_log.txt中查看正在发生的事情的提示。 -
@JohnAnderson 我这样做了,但我没有看到文件中显示错误,尽管我不太了解。我应该如何共享日志文件?谷歌云端硬盘链接:drive.google.com/file/d/1Kg_B9ufPdRc3sAqlMgEghwyxQW8GTn08/…
-
该文件的绝大部分只是 buildozer 构建
apk的日志。非常接近文件的末尾,有一行:List of devices attached,没有列出任何设备。您是否连接了 Android 设备? -
我确实附上了它。
-
@JohnAnderson 我重新尝试更新了上述文件。这次它显示了一个连接的设备。当应用程序在设备上安装并打开时,它会崩溃并且终端会不确定地变为空白。一旦我移除电缆,构建器就结束了。
标签: python-3.x kivy kivymd buildozer