آموزش برنامهنویسی موبایل با پایتون
برای برنامهنویسی موبایل با استفاده از پایتون، از فریم ورک Kivy استفاده میکنیم. با استفاده از فریم ورک Kivy، میتوانیم برنامههایی را برای سیستم عاملهای Android، IOS و حتی سیستم عاملهایی مثل Windows ،Linux و Mac ایجاد کنیم. بنابراین برای شروع کار ابتدا با استفاده از دستور زیر فریم ورک Kivy را از طریق ترمینال Pycharm نصب میکنیم.
pip install kivy
در اینجا با استفاده از دستور زیر میتوانیم ببینیم چه ماژولهایی همراه با نصب Kivy نصب شده است.
pip freeze
طریقهی ایجاد کنترل Label
import kivy
from kivy.app import App
from kivy.uix.label import Label
class My_Label(App):
def build(self):
return Label(text=” Dr. Sobhan Esmaeili “)
if __name__==”__main__”:
My_Label().run()
فایل برنامه نوشته شده را می توانید از اینجا دانلود نمایید
نصب Kivy در لینوکس
برای نصب kivy در لینوکس به ترتیب دستورات زیر را در ترمینال لینوکس اجرا میکنیم
۱) sudo apt-get update
۲) sudo apt-get upgrade
۳) sudo add-apt-repository ppa:kivy-team/kivy
۴) sudo apt-get update
۵) sudo apt-get install python3-kivy
۶) sudo apt install -y python3-pip
در پایان برای تست درستی نصب kivy در لینوکس، فایل Main.py نوشته شده بالا را به دسکتاب لینوکس منتقل کرده و با دستور زیر آن را اجرا میکنیم
python3 main.py
استفاده از Buildozer برای ساخت و استخراج فایل apk از پروژه kivy
کاری که Buildozer انجام میدهد این است که با استفاده از قابلیت Python for Android تمام کتابخانههای لازم اعم از SDK و NDK اندروید را که برای تبدیل پروژه kivy به پروژه Android لازم است را به صورت خودکار از اینترنت و سایتهای منبع دریافت میکند. در ادامه طریقه نصب و راه اندازی Buildozer را بیان میکنیم. لازم به ذکر است که توضیحات داده شده از طریق سایت سازنده که آدرس آن در زیر آورده شده است نیز در دسترس میباشد.
www.kivy.ory|help|getting started with kivy|packaging|create a package for android
از آنجایی که Buildozer تنها در دو سیستم عامل مک و لینوکس کار میکند مراحل انجام کار را در لینوکس (توزیع ۲۰.۰۴ ابونتو) دنبال میکنیم و برای اینکه بتوانیم بدون محدودیتهای ایجاد شده توسط شرکت گوکل به کتابخانههای مورد نیاز SDK و NDK دسترسی داشته باشیم، در تمامی مراحل از VPN استفاده میکنیم تا IP کشوری غیر از ایران را داشته باشیم. در ادامه در مسیر Desktop یک ترمینال باز میکنیم و وابستگیهای زیر را نصب میکنیم.
sudo apt-get install build-essential ccache git libncurses5:i386 libstdc++6:i386 libgtk2.0-0:i386 libpangox-1.0-0:i386 libpangoxft-1.0-0:i386 libidn11:i386 python2.7 python2.7-dev zip unzip openjdk-8-jdk python3-pip autoconf libtool pkg-config zlib1g-dev zlib1g:i386 libncurses5-dev libltdl-dev libffi-dev libssl-dev autotools-dev libncursesw5-dev libtinfo5 cython cmake
در ادامه با استفاده از دستورات زیر Buildozer را نصب میکنیم
۱) git clone https://github.com/kivy/buildozer.git
۲) cd buildozer
۳) sudo python3 setup.py install
سپس در مسیر پروژه یک ترمینال باز کرده و دستور زیر را در ترمینال اجرا میکنیم تا فایل Buildozer.spec مربوط به پروژه ایجاد شود.
buildozer init
فایل Buildozer.spec، فایلی است که در آن مشخصات فایل تبدیلی را وارد میکنیم. این فایل را با ادیتور پیش فرض لینوکس باز میکنیم و تغییرات مورد نظر خود را در آن اعمال می کنیم. برای مثال در قسمتهای package domain ،package name، title و source include exts به ترتیب میتوانیم عنوان برنامه، اسم پکیج اصلی برنامه، دامنه شرکت و .فایلهایی که میتوانند در پروژه قرار بگیرند را تعیین نماییم. به جز موارد ذکر شده موارد دیگری نیز وجود دارند که آنها را به صورت زیر مقدار دهی میکنیم.
title = Simple Application
package.name = simpleapplication
package.domain = ir.sobhan-esmaeili
source.dir = .
source.include_exts = py,png,jpg,kv,atlas
version = 0.2
android.api = 30
android.sdk = 30
در ادامه فایل Buildozer.spec را ذخیره میکنیم. سپس با اجرای دستور زیر پروژه را کامپایل میکنیم تا پروژه کیوی به پروژه اندرویدی تبدیل و فایل apk ساخته شود.
buildozer android debug
دقت داشته باشید که اگر برای اولین بار دستور بالا را اجرا میکنید، انجام فرآیند کامپایل به علت دریافت کتابخانههای لازم و SDK و NDK زمان زیادی را نیاز دارد اما در پروژههای بعدی این زمان کاهش مییابد. به یاد داشته باشید در کل انجام فرآیند نیاز است که VPN شما فعال باشد. در پایان، فایل apk ساخته شده در پوشه bin قابل دسترس میباشد. توجه داشته باشید که در هنگام نصب فایل اندروید ساخته شده ممکن است با اخطار سپر امنیتی Google Play مواجه شوید که میتوانید با نادیده گرفتن آن فرآیند نصب را ادامه دهید.
طریقهی ایجاد کنترل TextInput
import kivy
from kivy.app import App
from kivy.uix.textinput import TextInput
class My_TextInput(App):
def build(self):
return TextInput(multiline=False)
if __name__==”__main__”:
My_TextInput().run()
فایل برنامه نوشته شده را میتوانید از اینجا دانلود نمایید.
طریقهی استفاده از BoxLayout
import kivy
from kivy.app import App
from kivy.uix.label import Label
from kivy.uix.textinput import TextInput
from kivy.uix.boxlayout import BoxLayout
class My_BoxLayout(App):
def build(self):
lbl=Label(text=”Enter Your Message”, font_size=”20″)
txt=TextInput(multiline=False)
box=BoxLayout(orientation=”vertical”)
box.add_widget(lbl)
box.add_widget(txt)
return box
if __name__==”__main__”:
My_BoxLayout().run()
فایل برنامه نوشته شده را میتوانید از اینجا دانلود نمایید.
طریقه ایجاد کنترل Button
import kivy
from kivy.app import App
from kivy.uix.label import Label
from kivy.uix.textinput import TextInput
from kivy.uix.button import Button
from kivy.uix.boxlayout import BoxLayout
class My_BoxLayout(App):
def build(self):
lbl=Label(text=”Enter Your Message”, font_size=”20″)
txt=TextInput(multiline=False)
self.txt=txt
btn=Button(text=”[b]Send Message[/b]”, font_size=”20″, markup=True, background_color=”#f19fb4″, color=”black”, size_hint=(0.5,0.2), pos_hint={“x”:0.24,”y”:0.2} )
btn.bind(on_press=self.press_key)
box=BoxLayout(orientation=”vertical”)
box.add_widget(lbl)
box.add_widget(txt)
box.add_widget(btn)
return box
def press_key(self,event):
self.txt.text=””
if __name__==”__main__”:
My_BoxLayout().run()
فایل برنامه نوشته شده را میتوانید از اینجا دانلود نمایید.
تمرین (۱)
رابط کاربری را طراحی کنید که با استفاده از سه کنترل Label و سه کنترل TextInput، نام، نام خانوادگی و کشور کاربر را گرفته و با فشار دادن کنترل Button عبارت زیر را در خروجی چاپ کند.
Name Family From Country
همچنین در رابط کاربری طراحی شده، کنترل Button طوری برنامهنویسی گردد که بعد از فشار داده شدن و چاپ خروجی غیر فعال گردد و متن Thank You بر روی آن نمایش داده شود.
import kivy
from kivy.app import App
from kivy.uix import label, textinput, button, boxlayout
from kivy.core.window import Window
class My_App(App):
Window.size=(300, 600)
def submit(self, event):
if(self.txt_name.text != “” and self.txt_family.text != “” and self.txt_country.text != “”):
print(f”{self.txt_name.text} {self.txt_family.text} from {self.txt_country.text}”)
self.btn.disabled = True
self.btn.text = “Thank You”
self.txt_name.text = “”
self.txt_family.text = “”
self.txt_country.text = “”
def build(self):
self.lbl_name=label.Label(text=”Please Enter Your Name”, font_size=”15″)
self.txt_name=textinput.TextInput(multiline=False)
self.lbl_family = label.Label(text=”Please Enter Your Family”, font_size=”15″)
self.txt_family = textinput.TextInput(multiline=False)
self.lbl_country = label.Label(text=”Please Enter Your Country”, font_size=”15″)
self.txt_country = textinput.TextInput(multiline=False)
self.btn=button.Button(background_normal=”submit.png”, background_down=”submited.png”)
self.btn.bind(on_press=self.submit)
self.box=boxlayout.BoxLayout(orientation=”vertical”)
self.box.add_widget(self.lbl_name)
self.box.add_widget(self.txt_name)
self.box.add_widget(self.lbl_family)
self.box.add_widget(self.txt_family)
self.box.add_widget(self.lbl_country)
self.box.add_widget(self.txt_country)
self.box.add_widget(self.btn)
return self.box
if __name__==”__main__”:
My_App().run()
فایل برنامه نوشته شده را میتوانید از اینجا دانلود کنید.
طریقه ایجاد کنترل CheckBox
import kivy
from kivy.app import App
from kivy.uix.label import Label
from kivy.uix.boxlayout import BoxLayout
from kivy.uix.checkbox import CheckBox
class My_App(App):
def build(self):
lbl1=Label(text=”Red”)
ch1=CheckBox(active=True, disabled=True)
box1=BoxLayout(orientation=”horizontal”)
box1.add_widget(lbl1)
box1.add_widget(ch1)
lbl2 = Label(text=”Blue”)
ch2 = CheckBox()
box2 = BoxLayout(orientation=”horizontal”)
box2.add_widget(lbl2)
box2.add_widget(ch2)
super_box = BoxLayout(orientation=”vertical”)
super_box.add_widget(box1)
super_box.add_widget(box2)
return super_box
if __name__==”__main__”:
My_App().run()
فایل برنامه نوشته شده را میتوانید از اینجا دانلود کنید.
طریقه ایجاد کنترل DropDown
import kivy
from kivy.app import App
from kivy.uix.button import Button
from kivy.uix.dropdown import DropDown
class My_App(App):
def build(self):
super_btn = Button(text=”Select City”, size_hint=(0.3, 0.1), pos_hint=({“x”: 0.36, “y”: 0.5}))
dropdown=DropDown()
btn1=Button(text=”Tehran”, size_hint_y=None, height=30)
btn1.bind(on_press=lambda btn1:dropdown.select(btn1.text))
btn2=Button(text=”Shiraz”, size_hint_y=None, height=30)
btn2.bind(on_press=lambda btn2:dropdown.select(btn2.text))
dropdown.add_widget(btn1)
dropdown.add_widget(btn2)
dropdown.bind(on_select=lambda instance, selected_text: setattr(super_btn, “text”, selected_text))
super_btn.bind(on_release=dropdown.open)
return super_btn
if __name__==”__main__”:
My_App().run()
فایل برنامه نوشته شده را میتوانید از اینجا دانلود کنید.
طریقه ایجاد کنترل Carousel
import kivy
from kivy.app import App
from kivy.uix.image import AsyncImage
from kivy.uix.carousel import Carousel
class My_App(App):
def build(self):
carousel=Carousel(direction=”top”)
for i in range(1, 3):
src=f”Flowers/flower{i}.jpg”
image=AsyncImage(source=src)
carousel.add_widget(image)
return carousel
if __name__==”__main__”:
My_App().run()
فایل برنامه نوشته شده را میتوانید از اینجا دانلود کنید.