
أدرس 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. كل شيء مكتوب بلغة الثعبان العارية. في التفسيرات ، لن أسهب في شرح رمز بايثون ، ولكنني سأنتقل فورًا إلى الميزات المحددة لـ Kivy.
دعنا نذهب:
class MenuScreen(Screen):
الفصل مسؤول عن تشغيل صفحة بدء التطبيق ، ويمكن تسميته أي شيء ، على سبيل المثال ، StartScreen. ويرث وحدة شاشة kivy . يتكون التطبيق من 3 نوافذ ، يتم إنشاء هذه النوافذ باستخدام هذه الوحدة box = BoxLayout(orientation='vertical')
يقسم BoxLayout الشاشة إلى أجزاء متساوية ، أفقيًا افتراضيًا ، كتبت الاتجاه = "عموديًا" لتقسيمه عموديًا 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)
تخطيط الشبكة يذكرنا إلى حد ما بعلامة الجدول في html ، مما يشير إلى الأعمدة - عدد الأعمدة أو الصفوف - عدد الصفوف.
يمكنك تحديد كل من المعلمات أو معلمة واحدة.
سيتم تقسيم الشاشة إلى العدد المطلوب من الخلجان.
root = RecycleView(size_hint=(1, None), size=(Window.width, Window.height))
RecycleView - الوحدة النمطية التي يتم من خلالها إنشاء تمرير عمودي في تطبيقي. ميزة RecycleView هي أنها تبني مخطوطات بعناصر بنفس العرض والارتفاع. ويعمل بسرعة. وهناك وحدة ScrollView ، يمكنها إنشاء مخطوطات بعناصر ذات أحجام مختلفة ، ولكنها تعمل بشكل أبطأ من RecycleView
config.get('General', 'user_data')
- غالبا ما توجد مثل هذه الأسطر في الكود. لقد استخدمت للتو مستودع التكوين الأصلي kivy كمخزن البيانات. حسنًا ، يجب أن يكون هناك عدة آلاف من الأطباق ، فلا معنى لتسييج حديقة مع sqlite وشيء من هذا القبيل. يتم تخزين جميع البيانات في ملف واحد. يتم تخزين هذا الملف في نفس المجلد مثل التطبيق نفسه ، إذا قمت بتحديد self.directory كما في التعليمات البرمجية الخاصة بي ، ولكن يمكنك تحديد self.user_data_dir بحيث لا يتم إتلاف هذا الملف أثناء التقليب أو التحديثات.
يعمل على ويندوز ولينكس وماك
مبدأ جميع أنظمة التشغيل هو نفسه:
- نضع الثعبان 3
- نضع kivy
- ننشئ ملف main.py ونلصق الرمز أعلاه بالكامل فيه
- يديرها الفريق
python3 main.py
يجب أن يعمل البرنامج.
قم ببناء ملف apk وتشغيله على الهاتف مع android
لذا ، لدينا ملف كود برنامج مكتوب بلغة الثعبان. كيف الآن لإنشاء تطبيق بحيث يمكن تشغيله على هاتف يعمل بنظام Android؟ في السابق ، كانت عملية معقدة إلى حد ما تتطلب مهارات ورقصات مع الدف. الآن هذه ليست مشكلة.
إليك تعليمات خطوة بخطوة:
- قم بتنزيل جهاز افتراضي جاهز من مطوري kivy ، حيث تم تكوين كل شيء بالفعل. https://github.com/Zen-CODE/kivybits/blob/master/KivyCompleteVM/ReadMe.txt . كلمة المرور: kivy
- نطلقه في المربع الافتراضي.
- افتح الوحدة الطرفية وأدخل الأوامر التالية:
- يقوم الأمر الأخير بإنشاء مجلد bin في نفس الدليل ، وفي bin ستجد ملف foodoptions-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
اسم التطبيق الروسيإذا كنت تريد أن يتم استدعاء طلبك باللغة الروسية ، على سبيل المثال ، "يوميات الطعام" ، فأنت بحاجة إلى إجراء تغييرات على الملف:
.buildozer/android/platform/build/dists/foodoptions/templates/strings.tmpl.xml
تمت كتابة الاسم الروسي للتطبيق في علامة appName ، يتم إنشاء هذا المجلد بعد الإطلاق الأول لبرنامج debozer android debug. بعد تحرير الملف ، ارجع إلى مجلد FoodOptions وقم بتشغيل تصحيح أخطاء android buildozer مرة أخرى. سيتم تجميع الملف بطريقة جديدة. بعد التثبيت على الهاتف ، سيتم كتابة اسم البرنامج باللغة الروسية.
حول ملف buildozer.specهذا هو ملف github الخاص بي:
buildozer.specيخبر هذا الملف buildozer بالضبط كيفية بناء الحزمة.
هناك العديد من الاختلافات المختلفة. من يهتم ، ثم أدخل الأمر داخل الجهاز الظاهري:
cd /tmp buildozer init
سيتم إنشاء ملف buildozer.spec افتراضي مع مجموعة من التعليقات والتفسيرات. على سبيل المثال ، إذا كنت تريد بعض الرموز لتطبيقك ، فقم بالإشارة في السطر:
icon.filename = %(source.dir)s/data/icon.png
ملفك برمز. وسيتم تجميع التطبيق بالفعل مع الرمز الخاص بك.
إذا كنت بحاجة إلى تحميل وحدة نمطية معينة ليست جزءًا من مكتبة الثعبان الرسمية ، فإن هذا يتم في المتطلبات = سطر. بشكل عام ، يمكن أن تأخذ القصة حول ملف 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.
المراجع
من حيث المبدأ ، سيتمكن أي شخص يمكنه البرمجة في بيثون من تغيير التطبيق وإضافة ما يلي بسهولة:
- أضف تصميمًا لجعل التطبيق جميلًا
- استخدم ملفات kv لجعل التعليمات البرمجية أسهل. أود أن أعرض القياس: أولئك الذين هم على دراية ببرمجة الويب ، يتخيلون الكود بدون قوالب html وقوالب html. إزالة الأزرار والطبقات والأشياء الأخرى في ملفات kv هو شيء مثل jinja2 لمبرمج الويب. يبقى المنطق في ملفات .py ، وتظل الحلي في ملفات kv.
- إضافة عد السعرات الحرارية والبروتين والكربوهيدرات والدهون (BJU)
- أضف القدرة على تصوير الأطباق