
我学习了python
kivy,并决定自己编写一个小应用程序以使饮食多样化。 我决定分享。 本文供新手使用。 该应用程序需要大约100行代码。
创建自行车
应用程序的目的:
- 避免在食物中频繁重复。 为了不经常吃同一道菜。
- 不要忘记我吃过的菜,然后忘记了,而且多年来没有归还它们,因为我不记得老生常谈了。 它发生在我身上。
前言
您无法在简介中阅读任何歌词。
我不得不住在一个国家的一间旅馆里,在那里每天吃鸡蛋作为早餐,仅此一个月,所以一个月后我开始发痒。 他寻求医疗帮助,尽管他以前从未遭受过类似的痛苦。 在经历过痛苦的教训之后,他决定自己尽量减少食物的重复,以使体内不会积聚任何东西。 我只是告诉我,这是我的个人经历,没有强加于人。 也许没有规则无一例外,几十年来每天都可以食用燕麦片。
屏幕截图

假设我的饮食包括50道菜。 例如,我今天吃了一个煎蛋卷。 我单击按钮,然后煎蛋排在第50行,并且在它的前面有49种我将要吃的菜,以便再次到达煎蛋。 这就是应用程序的全部逻辑。 (在屏幕截图中,菜肴是煮熟的,所有巧合都是随机的,与我的实际饮食无关)。
源代码和说明
main.pyfrom kivy.app import App from kivy.uix.button import Button from kivy.uix.boxlayout import BoxLayout from kivy.uix.screenmanager import ScreenManager, Screen from kivy.uix.recycleview import RecycleView from kivy.uix.gridlayout import GridLayout from kivy.core.window import Window from kivy.config import ConfigParser from kivy.uix.textinput import TextInput from kivy.uix.label import Label from kivy.metrics import dp from datetime import datetime import os import ast import time class MenuScreen(Screen): def __init__(self, **kw): super(MenuScreen, self).__init__(**kw) box = BoxLayout(orientation='vertical') box.add_widget(Button(text=' ', on_press=lambda x: set_screen('list_food'))) box.add_widget(Button(text=' ', on_press=lambda x: set_screen('add_food'))) self.add_widget(box) class SortedListFood(Screen): def __init__(self, **kw): super(SortedListFood, self).__init__(**kw) def on_enter(self):
我故意不使用kv文件,因为该代码是出于教育目的而提供的,仅供熟悉python的人使用。 一切都用裸python编写。 在解释中,我不会详细介绍python代码,而是立即着手Kivy的特定功能。
出发:
class MenuScreen(Screen):
该类负责启动应用程序的起始页,它可以称为任何名称,例如StartScreen。 并继承了kivy Screen模块 。 该应用程序包含3个窗口,这些窗口是使用此模块创建的 box = BoxLayout(orientation='vertical')
BoxLayout将屏幕分为相等的部分,默认情况下为水平,我写了direction ='vertical'来垂直分割 Button(text=' ', on_press=lambda x: set_screen('list_food'))
按钮 -创建按钮,on_press设置按下时将启动的功能。
.add_widget()
-将按钮添加到图层和窗口 self.layout = GridLayout(cols=1, spacing=10, size_hint_y=None)
Grid Layout有点让人联想到html中的table标记,它指示cols-列或行数-行数。
您可以指定两个参数或一个参数。
屏幕将被划分为所需的托架数量。
root = RecycleView(size_hint=(1, None), size=(Window.width, Window.height))
RecycleView-用于在我的应用程序中创建垂直滚动的模块。 RecycleView的一个功能是使用相同宽度和高度的元素构建滚动。 而且它运行很快。 并且有一个ScrollView模块,它可以使用不同大小的元素来构建滚动,但是它比RecycleView慢
config.get('General', 'user_data')
-在代码中经常发现这样的行。 我只是将本机Config kivy存储库用作数据存储。 好吧,让它有几千个菜,用sqlite之类的东西围起来的花园是没有意义的。 所有数据都存储在一个文件中。 如果您像我的代码中那样指定self.directory,则此文件与应用程序本身存储在同一文件夹中,但是可以指定self.user_data_dir,以便在排列或更新过程中不会破坏该文件。
在Windows,Linux和MacOS上运行
所有操作系统的原理都相同:
- 我们把python3
- 我们把猕猴桃
- 我们创建main.py文件,并将上面的全部代码粘贴到其中
- 由团队经营
python3 main.py
该程序应该可以工作。
生成apk文件并在Android手机上运行
因此,我们有一个用python编写的程序代码文件。 现在如何创建应用程序,以便可以在具有Android的手机上启动该应用程序? 以前,这是一个相当复杂的过程,需要技巧和手鼓跳舞。 现在这不是问题。
以下是分步说明:
- 从奇异的开发者那里下载一个现成的虚拟机,其中已经配置了所有东西。 https://github.com/Zen-CODE/kivybits/blob/master/KivyCompleteVM/ReadMe.txt 。 密码:kivy
- 我们在Virtual Box中启动它。
- 打开终端并输入以下命令:
- 最后一条命令在同一目录中创建bin文件夹,在bin中,您将找到foodfoods-0.1-debug.apk文件,您可以将该文件上传到手机上,安装并享用该应用程序
如何将apk文件上传到手机?当然,您可以根据需要进行操作,通过邮件发送,将其放置在某处,以电报形式放置,等等,然后将应用程序下载到手机上。
但是有一个专门的工具可以做到这一点。 我们打开手机上的开发人员模式,然后用USB电缆连接它。 虚拟机应显示您已连接电话。 接下来,安装adb:
sudo apt install adb
安装后,转到bin文件夹并输入命令
adb install -r foodoptions-0.1-debug.apk
您会在大约一分钟后在手机上看到该应用程序
在控制台中成功。
kivy@kivy-complete:~/Project/FoodOptions/bin$ adb install -r foodoptions-0.1-debug.apk 342 KB/s (10083019 bytes in 28.730s) Success kivy@kivy-complete:~/Project/FoodOptions/bin$
如果应用程序突然崩溃或无法按预期运行,则存在用于查看错误的命令
adb logcat| grep python
俄语应用名称如果要用俄语(例如“ Food Diary”)来调用应用程序,则需要对文件进行更改:
.buildozer/android/platform/build/dists/foodoptions/templates/strings.tmpl.xml
应用程序的俄语名称写在appName标记中,此文件夹是在buildozer android debug首次启动后创建的。 编辑完文件后,返回FoodOptions文件夹并再次运行buildozer android debug。 该文件将以新的方式进行组装。 在手机上安装后,程序名称将以俄语书写。
关于buildozer.spec文件这是我的github文件:
buildozer.spec该文件准确告诉buildozer如何构建软件包。
有许多不同的变化。 谁在乎,然后在虚拟机内部输入命令:
cd /tmp buildozer init
将创建一个默认的buildozer.spec文件,其中包含大量注释和解释。 例如,如果您想为应用程序添加一些图标,请在该行中指出:
icon.filename = %(source.dir)s/data/icon.png
您的文件带有图标。 应用程序将已经与您的图标一起组装。
如果您需要加载某些不属于官方python库的特定模块,则可以在requirements =行中完成。 通常,关于buildozer.spec文件的故事可能需要整篇甚至两篇。
在Google Play上下载应用程序必须注册,完成所有程序,获取密钥。 然后运行:
sudo apt install zipalign buildozer android release jarsigner -verbose -sigalg SHA1withRSA -digestalg SHA1 -keystore /path/keystore bin/apk-unsigned.apk apkname zipalign -v 4 bin/apk-apkname-unsigned.apk bin/apk-apkname-release.apk
生成的文件apk-apkname-release.apk上传到Google Play。
参考文献
原则上,任何可以使用python编程的人都可以更改应用程序并轻松添加以下内容:
- 添加设计以使应用美观
- 使用kv文件可简化代码。 我可以举一个类比:熟悉Web编程的人,想象没有html模板和html模板的代码。 对于Web程序员,将按钮,图层和其他内容删除到kv文件中就像jinja2一样。 逻辑保留在.py文件中,而小玩意保留在kv文件中。
- 添加计数的卡路里,蛋白质,碳水化合物,脂肪(BJU)
- 增加拍照能力