J'étudie le python
kivy et décide pour moi d'écrire une petite application pour diversifier mon alimentation. J'ai décidé de le partager. Cet article est destiné aux nouveaux venus sur Kivy. L'application prend environ 100 lignes de code.
Objectif de la création d'une
application vélo:
- Évitez les répétitions fréquentes dans les aliments. Afin de ne pas manger trop souvent le même plat.
- N'oubliez pas les plats que j'ai mangés, puis oubliés, et pendant des années ne leur sont pas revenus, car je ne me souvenais pas ringard. Ça m'arrive.
Intro
Vous ne pouvez pas lire dans l'intro des paroles.
Je devais vivre dans un pays, dans un hôtel, où on me donnait des œufs tous les jours pour le petit déjeuner et rien de plus, alors un mois plus tard j'ai commencé à me démanger. Il a demandé de l'aide médicale, bien qu'il n'ait jamais souffert de quoi que ce soit auparavant. Enseigné par une expérience amère, il a décidé ensuite d'autoriser le moins de répétitions possible dans la nourriture afin que rien ne puisse s'accumuler dans le corps. C'est mon expérience personnelle, je dis juste, sans imposer. Il n'y a peut-être pas de règles sans exception, probablement la farine d'avoine peut être consommée tous les jours pendant des décennies.
Captures d'écran

Supposons que mon alimentation se compose de 50 plats. Par exemple, j'ai mangé une omelette aujourd'hui. Je clique sur le bouton, et l'omelette est en ligne 50 en ligne, et devant elle se trouvent 49 plats que je mangerai afin de retrouver l'omelette. C'est toute la logique de l'application. (Dans les captures d'écran, les plats sont cuisinés, toutes les coïncidences sont aléatoires, elles n'ont rien à voir avec mon vrai régime).
Code source et explications
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):
Je n'ai délibérément pas utilisé de fichiers kv, car le code est donné à des fins éducatives, pour les personnes familiarisées avec python. Tout est écrit en python nu. Dans les explications, je ne m'attarderai pas sur l'explication du code python, mais passons immédiatement aux fonctionnalités spécifiques de Kivy.
C'est parti:
class MenuScreen(Screen):
La classe est responsable du lancement de la page de démarrage de l'application, elle peut s'appeler n'importe quoi, par exemple, StartScreen. Et hérite du module kivy Screen . L'application se compose de 3 fenêtres, ces fenêtres sont créées à l'aide de ce module box = BoxLayout(orientation='vertical')
BoxLayout divise l'écran en parties égales, horizontal par défaut, j'ai écrit orientation = 'vertical' pour le diviser verticalement Button(text=' ', on_press=lambda x: set_screen('list_food'))
Bouton - crée des boutons, on_press définit la fonction qui sera lancée lorsque vous appuyez dessus.
.add_widget()
- ajoute des boutons aux calques et aux fenêtres self.layout = GridLayout(cols=1, spacing=10, size_hint_y=None)
La disposition de la grille rappelle quelque peu la balise table en html, indiquant cols - le nombre de colonnes ou de lignes - le nombre de lignes.
Vous pouvez spécifier les deux paramètres ou un paramètre.
L'écran sera divisé en le nombre de baies souhaité.
root = RecycleView(size_hint=(1, None), size=(Window.width, Window.height))
RecycleView - le module avec lequel créer un défilement vertical dans mon application. Une caractéristique de RecycleView est qu'il construit des rouleaux avec des éléments de même largeur et hauteur. Et ça marche vite. Et il y a un module ScrollView , il peut créer des parchemins avec des éléments de différentes tailles, mais il fonctionne plus lentement que RecycleView
config.get('General', 'user_data')
- dans le code de telles lignes sont souvent trouvées. Je viens d'utiliser le référentiel natif Config kivy comme magasin de données. Eh bien, qu'il y ait plusieurs milliers de plats, cela n'a aucun sens de clôturer un jardin avec du sqlite et quelque chose comme ça. Toutes les données sont stockées dans un seul fichier. Ce fichier est stocké dans le même dossier que l'application elle-même, si vous spécifiez self.directory comme dans mon code, mais vous pouvez spécifier self.user_data_dir afin que ce fichier ne soit pas détruit lors de la permutation ou des mises à jour.
Fonctionnant sur windows & linux & macos
Le principe pour tous les systèmes d'exploitation est le même:
- Nous mettons python3
- Nous mettons kivy
- Nous créons le fichier main.py et y collons tout le code ci-dessus
- Géré par équipe
python3 main.py
Le programme devrait fonctionner.
Créez un fichier apk et exécutez sur le téléphone avec Android
Nous avons donc un fichier de code de programme écrit en python. Comment créer une application pour la lancer sur un téléphone avec un Android? Auparavant, c'était un processus assez sophistiqué qui exigeait des compétences et des danses avec un tambourin. Maintenant, ce n'est pas un problème.
Voici une instruction étape par étape:
- Téléchargez une machine virtuelle prête à l'emploi auprès des développeurs kivy, dans laquelle tout est déjà configuré. https://github.com/Zen-CODE/kivybits/blob/master/KivyCompleteVM/ReadMe.txt . Mot de passe: kivy
- Nous le lançons dans la Virtual Box.
- Ouvrez le terminal et entrez les commandes suivantes:
- La dernière commande crée le dossier bin dans le même répertoire, dans bin vous trouverez le fichier foodoptions-0.1-debug.apk, que vous pouvez télécharger sur votre téléphone, installer et profiter de l'application
Comment télécharger un fichier apk sur le téléphone?Bien sûr, vous pouvez le faire comme vous le souhaitez, l'envoyer par courrier, le mettre quelque part, le mettre dans un télégramme, etc., puis télécharger l'application sur votre téléphone.
Mais il existe un outil spécialisé pour cela. Nous activons le mode développeur sur le téléphone, le connectons avec un câble USB. La machine virtuelle doit voir que vous avez connecté le téléphone. Ensuite, installez adb:
sudo apt install adb
Après l'installation, accédez au dossier bin et entrez la commande
adb install -r foodoptions-0.1-debug.apk
Et vous pouvez voir l'application sur le téléphone dans environ une minute après avoir vu
Succès dans la console.
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$
Si soudainement l'application se bloque ou ne se comporte pas comme prévu, il existe une telle commande pour afficher les erreurs
adb logcat| grep python
Nom de l'application russeSi vous souhaitez que votre demande soit appelée en russe, par exemple, "Journal alimentaire", vous devez apporter des modifications au fichier:
.buildozer/android/platform/build/dists/foodoptions/templates/strings.tmpl.xml
Le nom russe de l'application est écrit dans la balise appName, ce dossier est créé après le premier lancement du débogage android buildozer. Après avoir modifié le fichier, retournez dans le dossier FoodOptions et réexécutez le débogage android buildozer. Le fichier sera assemblé d'une nouvelle manière. Après l'installation sur le téléphone, le nom du programme sera écrit en russe.
À propos du fichier buildozer.specVoici mon fichier github:
buildozer.specCe fichier indique à buildozer exactement comment construire le package.
Il existe de nombreuses variantes différentes. Peu importe, puis entrez la commande à l'intérieur de la machine virtuelle:
cd /tmp buildozer init
Un fichier buildozer.spec par défaut sera créé avec un tas de commentaires et d'explications. Par exemple, si vous voulez une icône pour votre application, indiquez dans la ligne:
icon.filename = %(source.dir)s/data/icon.png
votre fichier avec une icône. Et l'application s'assemblera déjà avec votre icône.
Si vous avez besoin de charger un module spécifique qui ne fait pas partie de la bibliothèque python officielle, cela se fait dans la ligne requirements =. En général, l'histoire du fichier buildozer.spec peut prendre un article entier, voire deux.
Téléchargez une application sur Google PlayIl faut s'inscrire, passer par toutes les procédures, récupérer les clés. Et puis exécutez:
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
Le fichier résultant apk-apkname-release.apk est téléchargé sur Google Play.
Les références
En principe, toute personne pouvant programmer en python pourra modifier l'application et ajouter facilement les éléments suivants:
- Ajoutez un design pour rendre l'application magnifique
- Utilisez des fichiers kv pour faciliter le code. Je donnerais une analogie: ceux qui sont familiers avec la programmation Web, imaginent du code sans modèles html et modèles html. Supprimer des boutons, des couches et d'autres choses dans des fichiers kv est quelque chose comme jinja2 pour un programmeur web. La logique reste dans les fichiers .py et les babioles restent dans les fichiers kv.
- Ajoutez les calories, les protéines, les glucides et les graisses (BJU)
- Ajoutez la possibilité de photographier des plats