当前位置:   article > 正文

第三篇【传奇开心果系列】beeware的Toga开发移动应用示例:家庭记账本

第三篇【传奇开心果系列】beeware的Toga开发移动应用示例:家庭记账本

传奇开心果博文系列

  • 系列博文目录
    • beeware的Toga开发移动应用示例系列
  • 博文目录
    • 一、目标
    • 二、编程思路
    • 三、写示例代码,增删改查功能全部实现
    • 四、实现报表和统计图表
    • 五、添加数据分析功能

系列博文目录

beeware的Toga开发移动应用示例系列

博文目录

一、目标

记账应用:实现一个简单的记账应用,用户可以记录每日的收入和支出,并生成报表和统计图表来分析消费情况。使用beeware的Toga实现安卓小项目家庭记账本。
在这里插入图片描述

二、编程思路

在这里插入图片描述要使用Beeware的Toga来实现一个简单的记账应用,你可以按照以下步骤进行:

  1. 确定功能需求:首先确定记账应用的功能需求,包括记录每日的收入和支出、生成报表和统计图表等。
  2. 创建项目:使用Toga命令行工具创建一个新的Toga项目。在终端中运行以下命令:
toga create --template=android my_accounting_app
  • 1
  1. 设计界面布局:根据记账应用的功能需求,设计应用的界面布局。可以使用Toga提供的各种组件(如按钮、文本输入框、标签等)来创建用户界面。
  2. 实现数据存储:使用SQLite或其他适合的数据库来存储用户的账目数据。设计数据库表结构,包括账目类型、金额、日期等字段。在Toga应用中使用数据库API来实现数据的存储和读取操作。
  3. 实现数据录入:创建一个表单页面,用于用户输入每日的收入和支出信息。通过Toga的文本输入框组件获取用户输入的数据,并将数据存储到数据库中。
  4. 实现报表和统计图表:根据用户的账目数据,使用Toga的图表组件生成相应的报表和统计图表。可以使用柱状图或折线图来展示不同时间段的收入和支出情况。
  5. 添加数据分析功能:根据用户的账目数据,可以添加一些数据分析的功能,比如计算总收入和支出、计算平均每日消费等。
  6. 完善用户体验:在应用中添加一些便捷的功能,比如自动填充、数据备份和恢复等,提高用户的使用体验。
  7. 进行测试和优化:完成开发后,进行测试,确保应用的稳定性和功能完整性。根据用户的反馈进行优化和改进。
    以上是使用Beeware的Toga实现一个简单记账应用的一般流程。具体的实现细节可以根据实际需求进行调整和扩展。希望对你有帮助!

在这里插入图片描述

三、写示例代码,增删改查功能全部实现

以下是一个使用Beeware的Toga实现的简单记账应用示例代码,包含了增删改查功能:

import toga
from toga.style import Pack
from toga.style.pack import COLUMN, ROW
class AccountingApp(toga.App):
def startup(self):
self.main_window = toga.MainWindow(title="Accounting App")
self.account_entries = []
self.create_ui()
self.main_window.show()
def create_ui(self):
self.entry_table = toga.Table(
headings=['Title', 'Amount'],
data=self.get_entry_data(),
style=Pack(flex=1)
)
self.title_input = toga.TextInput(placeholder='Title')
self.amount_input = toga.NumberInput(placeholder='Amount')
add_button = toga.Button('Add', on_press=self.add_entry)
delete_button = toga.Button('Delete', on_press=self.delete_entry)
edit_button = toga.Button('Edit', on_press=self.edit_entry)
box = toga.Box(
children=[
self.entry_table,
toga.Box(
children=[self.title_input, self.amount_input, add_button, delete_button, edit_button],
style=Pack(direction=ROW)
)
],
style=Pack(direction=COLUMN)
)
self.main_window.content = box
def get_entry_data(self):
return [(entry.title, entry.amount) for entry in self.account_entries]
def add_entry(self, widget):
title = self.title_input.value
amount = self.amount_input.value
if title and amount:
entry = AccountEntry(title=title, amount=amount)
self.account_entries.append(entry)
self.update_entry_table()
self.title_input.value = ''
self.amount_input.value = None
def delete_entry(self, widget):
selected_row = self.entry_table.selection
if selected_row is not None:
del self.account_entries[selected_row]
self.update_entry_table()
def edit_entry(self, widget):
selected_row = self.entry_table.selection
if selected_row is not None:
entry = self.account_entries[selected_row]
def update_entry(widget):
entry.title = self.title_input.value
entry.amount = self.amount_input.value
self.update_entry_table()
dialog.close()
dialog = toga.Dialog(
title='Edit Entry',
content=toga.Box(
children=[self.title_input, self.amount_input],
style=Pack(direction=COLUMN)
),
buttons=[
toga.Button('Update', on_press=update_entry),
toga.Button('Cancel', on_press=lambda widget: dialog.close())
]
)
self.title_input.value = entry.title
self.amount_input.value = entry.amount
dialog.show()
def update_entry_table(self):
self.entry_table.data = self.get_entry_data()
class AccountEntry:
def __init__(self, title, amount):
self.title = title
self.amount = amount
def main():
return AccountingApp()
if __name__ == '__main__':
main().main_loop()
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13
  • 14
  • 15
  • 16
  • 17
  • 18
  • 19
  • 20
  • 21
  • 22
  • 23
  • 24
  • 25
  • 26
  • 27
  • 28
  • 29
  • 30
  • 31
  • 32
  • 33
  • 34
  • 35
  • 36
  • 37
  • 38
  • 39
  • 40
  • 41
  • 42
  • 43
  • 44
  • 45
  • 46
  • 47
  • 48
  • 49
  • 50
  • 51
  • 52
  • 53
  • 54
  • 55
  • 56
  • 57
  • 58
  • 59
  • 60
  • 61
  • 62
  • 63
  • 64
  • 65
  • 66
  • 67
  • 68
  • 69
  • 70
  • 71
  • 72
  • 73
  • 74
  • 75
  • 76
  • 77
  • 78
  • 79
  • 80

这个示例代码实现了一个简单的记账应用,包含了增加、删除、修改和查看账目的功能。用户可以在表格中查看已记录的账目,并通过输入框输入新的账目信息,点击添加按钮将账目添加到列表中。通过选中列表中的行,可以点击删除按钮删除对应的账目,点击编辑按钮对账目进行修改。
请注意,这只是一个简单的示例代码,可能还需要根据具体需求进行修改和完善。希望对你有帮助!
在这里插入图片描述

四、实现报表和统计图表

要实现报表和统计图表功能,你可以使用第三方库来生成图表,比如matplotlib或者toga-chart. 下面是一个使用toga-chart库生成简单统计图表的示例代码:

import toga
from toga.style import Pack
from toga_chart import DonutChart
class AccountingApp(toga.App):
def startup(self):
self.main_window = toga.MainWindow(title="Accounting App")
self.account_entries = []
self.create_ui()
self.main_window.show()
def create_ui(self):
self.entry_table = toga.Table(
headings=['Title', 'Amount'],
data=self.get_entry_data(),
style=Pack(flex=1)
)
self.chart = DonutChart(style=Pack(flex=1))
self.update_chart()
box = toga.Box(
children=[self.entry_table, self.chart],
style=Pack(direction=toga.COLUMN, padding=10)
)
self.main_window.content = box
def get_entry_data(self):
return [(entry.title, entry.amount) for entry in self.account_entries]
def add_entry(self, widget):
title = self.title_input.value
amount = self.amount_input.value
if title and amount:
entry = AccountEntry(title=title, amount=amount)
self.account_entries.append(entry)
self.update_entry_table()
self.update_chart()
self.title_input.value = ''
self.amount_input.value = None
def delete_entry(self, widget):
selected_row = self.entry_table.selection
if selected_row is not None:
del self.account_entries[selected_row]
self.update_entry_table()
self.update_chart()
def update_entry_table(self):
self.entry_table.data = self.get_entry_data()
def update_chart(self):
labels = [entry.title for entry in self.account_entries]
amounts = [entry.amount for entry in self.account_entries]
self.chart.data = list(zip(labels, amounts))
class AccountEntry:
def __init__(self, title, amount):
self.title = title
self.amount = amount
def main():
return AccountingApp()
if __name__ == '__main__':
main().main_loop()
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13
  • 14
  • 15
  • 16
  • 17
  • 18
  • 19
  • 20
  • 21
  • 22
  • 23
  • 24
  • 25
  • 26
  • 27
  • 28
  • 29
  • 30
  • 31
  • 32
  • 33
  • 34
  • 35
  • 36
  • 37
  • 38
  • 39
  • 40
  • 41
  • 42
  • 43
  • 44
  • 45
  • 46
  • 47
  • 48
  • 49
  • 50
  • 51
  • 52
  • 53
  • 54

在这个示例代码中,我们使用了toga-chart库的DonutChart组件来生成一个环形图表。每次添加或删除账目时,我们都更新了图表的数据,以展示不同账目的金额分布情况。
请注意,这个示例仅展示了一个简单的统计图表的生成,你可以根据自己的需求选择合适的库和图表类型,并根据具体需求进行修改和完善。希望对你有帮助!
在这里插入图片描述

五、添加数据分析功能

要添加数据分析功能,你可以根据用户的账目数据进行一些统计和计算操作。以下是一个示例代码,展示如何计算总收入和支出以及平均每日消费:

import toga
from toga.style import Pack
from toga_chart import DonutChart
class AccountingApp(toga.App):
def startup(self):
self.main_window = toga.MainWindow(title="Accounting App")
self.account_entries = []
self.create_ui()
self.main_window.show()
def create_ui(self):
self.entry_table = toga.Table(
headings=['Title', 'Amount'],
data=self.get_entry_data(),
style=Pack(flex=1)
)
self.chart = DonutChart(style=Pack(flex=1))
self.update_chart()
total_income_label = toga.Label('Total Income:')
self.total_income_value = toga.Label('0')
total_expense_label = toga.Label('Total Expense:')
self.total_expense_value = toga.Label('0')
average_daily_expense_label = toga.Label('Average Daily Expense:')
self.average_daily_expense_value = toga.Label('0')
box = toga.Box(
children=[
self.entry_table,
self.chart,
total_income_label, self.total_income_value,
total_expense_label, self.total_expense_value,
average_daily_expense_label, self.average_daily_expense_value
],
style=Pack(direction=toga.COLUMN, padding=10)
)
self.main_window.content = box
def get_entry_data(self):
return [(entry.title, entry.amount) for entry in self.account_entries]
def add_entry(self, widget):
title = self.title_input.value
amount = self.amount_input.value
if title and amount:
entry = AccountEntry(title=title, amount=amount)
self.account_entries.append(entry)
self.update_entry_table()
self.update_chart()
self.update_data_analysis()
self.title_input.value = ''
self.amount_input.value = None
def delete_entry(self, widget):
selected_row = self.entry_table.selection
if selected_row is not None:
del self.account_entries[selected_row]
self.update_entry_table()
self.update_chart()
self.update_data_analysis()
def update_entry_table(self):
self.entry_table.data = self.get_entry_data()
def update_chart(self):
labels = [entry.title for entry in self.account_entries]
amounts = [entry.amount for entry in self.account_entries]
self.chart.data = list(zip(labels, amounts))
def update_data_analysis(self):
total_income = sum(entry.amount for entry in self.account_entries if entry.amount > 0)
self.total_income_value.text = str(total_income)
total_expense = sum(entry.amount for entry in self.account_entries if entry.amount < 0)
self.total_expense_value.text = str(total_expense)
average_daily_expense = total_expense / len(set(entry.date for entry in self.account_entries))
self.average_daily_expense_value.text = str(average_daily_expense)
class AccountEntry:
def __init__(self, title, amount):
self.title = title
self.amount = amount
def main():
return AccountingApp()
if __name__ == '__main__':
main().main_loop()
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13
  • 14
  • 15
  • 16
  • 17
  • 18
  • 19
  • 20
  • 21
  • 22
  • 23
  • 24
  • 25
  • 26
  • 27
  • 28
  • 29
  • 30
  • 31
  • 32
  • 33
  • 34
  • 35
  • 36
  • 37
  • 38
  • 39
  • 40
  • 41
  • 42
  • 43
  • 44
  • 45
  • 46
  • 47
  • 48
  • 49
  • 50
  • 51
  • 52
  • 53
  • 54
  • 55
  • 56
  • 57
  • 58
  • 59
  • 60
  • 61
  • 62
  • 63
  • 64
  • 65
  • 66
  • 67
  • 68
  • 69
  • 70
  • 71
  • 72
  • 73
  • 74
  • 75

在这个示例代码中,我们添加了三个标签来展示数据分析结果:总收入、总支出和平均每日消费。在更新账目数据时,我们通过计算得到这些统计数据,并更新相应的标签内容。
在这里插入图片描述
在这里插入图片描述

请注意,这个示例仅展示了一些简单的数据分析功能,你可以根据自己的需求进行更复杂的数据分析和计算操作。希望对你有帮助!

声明:本文内容由网友自发贡献,不代表【wpsshop博客】立场,版权归原作者所有,本站不承担相应法律责任。如您发现有侵权的内容,请联系我们。转载请注明出处:https://www.wpsshop.cn/w/盐析白兔/article/detail/257502
推荐阅读
  

闽ICP备14008679号