نام: علی درس: برنامه سازی سیستم موضوع: کتابخانه kivy برای اندروید درپایتون سال: کیوی یک کتابخانه آزاد و متن باز از زبان برنامه نویسی پایتون است که برای توسعه نرمافزارهای چند لمسی با رابط کاربری زیبا توذیع شده است. کیوی میتواند روی لینوکس، مک، ویندوز، اندروید، آیاواس اجرا شود. کیوی تحت MIT license ارایه شده و رایگان و کد بازاست. کیوی فریمورک اصلی توسعه داده شده توسط بنیاد کیوی است، در کنار پایتون برای اندروید، Kivy iOS و کتابخانههای بسیار دیگری که برای استفاده کراس پلتفورم ساخته شدند. در سال میلادی، کیوی دلار از بنیاد پایتون دریافت کرد برای انتقال به نسخه پایتون کیوی همچنین از رزبری پای نیز پشتیبانیمی کند. فریم کاری شامل تمام امکانات برای ساخت این گونه نرمافزارها است: پشتیبانی کامل از ورودیهای موس، کیبورد و ورودیهای لمسیمخصوص سیستم عامل کتابخانه گرافیک فقط شامل اوپن جی ال ابزارکهای گرافیکی بسیار گسترده که از تکنولوژی چند لمسیپشتیبانی میکنند زبان برنامهنویسی اختصاصی Kv که برای راحتی در توسعه محیط کاربری طراحی شده کیوی ارتقا یافته PyMT project است و برای پروژههای جدید پیشنهاد می شود. در حالت عادی اندروید از از برنامهنویسی بومی Python پشتیبانی نمی کند اما شما می توانید با استفاده از ابزارهای موجود، برنامه هایی در این زبان بنویسید و بعد آن را به APK تبدیل کنید که به صورت موفقیت آمیز بر روی دستگاههای اندروید قابل اجرا هستند. در بالا گفتیم ابزاری وجود دارد که به ما کمک می کند برنامه با زبان پایتون بنویسیم و آن را به APK تبدیل کنیم. Kivy یکی از محبوبترین و قدرتمندترین راه حلها برای این کار است. نه تنها این برنامه به صورت متن باز است، نه تنها از ویندوز، Mac ، لینوکس و iOS ، جدای از اندروید، پشتیبانی می کند، بلکه به گونهای طراحی شده است که شما را به برنامه نویسی سریع ترغیب کند. شما میتوانید از آن به عنوان ابزار نمونهسازی استفاده کنید و این کار را با تنها چند خط کد انجام دهید. Kivy یک کتابخانه متن باز پایتون برای توسعه سریع اپلیکیشن ها است که از رابط کاربری نوآورانه مانند اپلیکیشن های multi - touch استفاده می کند. کتابخانه Kivy به شما امکان می دهد از پایتون برای ایجاد اپلیکیشن برای دستگاه های تلفن همراه و دسکتاپ استفاده کنید Kivy کد شما را دریافت می کند و اپلیکیشن ها را از منطق شما ایجاد می کند. سپس، در هر برنامه و APK ، می توانید پایتون را نصب کنید. Kivy یک کتابخانه رایگان و متنباز هست Kivy یک محیط گرافیکی برای ساخت اپلیکیشن موبایل فراهممیکند با Kivy می توانی برنامههایی بنویسی که دارای فرمانهای چندلمسی هستند با Kivy می توانی برنامههایی برای موبایل بنویسی که هم رویاندروید و هم روی iOS اجرا شوند Kivy رو می شود روی ویندوز، لینوکس، مک و Raspberry Pi هم اجرا کردکیوی فریمورک اصلی توسعه داده شده توسط بنیاد کیوی است، در کنارپایتون برای اندروید، Kivy iOS و کتابخانههای بسیار دیگری که برایاستفاده کراس پلتفورم ساخته شدند. در سال میلادی، کیوی دلار از بنیاد پایتون برای انتقال به نسخه پایتون دریافت کرد. کیوی همچنین از رزبری پای ( Raspberry pi ) نیز پشتیبانی میکند. رزبری پای یک رایانه بسیار کوچک و ارزان با تمام قابلیتهای یک رایانهواقعی است که میتوان از آن در سیستمهای روباتیک، اتوماسیون، اینترنت اشیاء و. استفاده کرد. کاربردهای پژوهشی و علمی این رایانه در مجله ای تخصصی که وابستهبه بنیاد رزبری پای است به صورت ماهیانه مطرح می شود. کتابخانه Kivy شامل تمام امکانات برای ساخت این گونه نرم افزارها است: پشتیبانی کامل از ورودی های موس، کیبورد و ورودی های لمسمخصوص سیستم عامل کتابخانه گرافیک فقط شامل اوپن جی ال ابزارکهای گرافیکی بسیار گسترده که از تکنولوژی چند لمسیپشتیبانی میکنند زبان برنامهنویسی اختصاصی Kv که برای راحتی در توصعهمحیط کاربری طراحی شده کیوی ارتقا یافته PyMT project است و برای پروژههای جدیدپیشنهاد میشود ویژگی های شاخص کتابخانه Kivy پایتون کراس پلت فرم Kivy در لینوکس، ویندوز، اندروید، IOS و OS X قابل اجرا است. شما می توانید همان کد اصلی را در تمام پلت فرم های پشتیبانی شده اجرا کنید. این فریم ورک می تواند از بیشترین ورودی ها، پروتکل ها و دستگاه از جمله WM - touch و WM - Pen و Mtdev استفاده کند. همچنین در این فریم ورک شبیه ساز ماوس چند لمسی گنجانده شده است. فریم ورک یا بهتر است بگویم کتابخانه کیوی صد در صد رایگان است. این ابزار به طور حرفه ای توسعه یافته، حمایت شده و مورد استفاده قرار میگیرد و شما می توانید آن را در یک محصول تجاریاستفاده کنید. این فریم ورک پایدار و دارای یک API مستند و همچنین یک راهنمای برنامه نویسی برای کمک به شما در شروع کار است. موتور گرافیکی بر روی OpenGL ES ساخته شده و با استفاده از یک خط لوله مدرن و سریع کار می کند. این ابزار با بیش از بیست ویجت همراه می باشد که همه آن موارد بسیار قابل گسترش هستند. بسیاری از قطعات در C با استفاده از Cython نوشته شده اند و با تست های Regression آزمایش شده اند زبان Kv زبان کی وی ( Kv ) یک زبان مرتبط با محیط کاربری است. مانند کیو ام ال، به راحتی میتوان تمام رابط کاربری را در آن ایجاد کرد. برای مثال، برای ساختن یک پنجره که شامل یک مرورگر فایل و کلید لغو/تایید باشد، می توان ابزارک اصلی را در پایتون ساخت و محیط کاربری را در Kv برنامهنویسی کرد. پروژه های مکمل سازنده ( Buildozer ) : بسته بندی عمومی پایتون برای اندروید و IOS پلیر ( Plyer ) : بسته بندی پایتون مستقل از پلت فرم برای API های وابسته به پلت فرم پیجنیوس ( Pyjnius ) : دسترسی پویا به API های جاوا یا اندروید ازطریق پایتون پیوبیس ( pyobjus ) : دسترسی پویا به API های Objective - C یا IOS از طریق پایتون پایتون برای اندروید: toolchain برای ساخت و بسته بندی برنامههای پایتون برای اندروید Kivy آی او اس: toolchain برای ساخت و بسته بندی برنامه های کیوی برای IOS Audiostream : کتابخانه برای دسترسی مستقیم به میکروفون و بلندگو Kivy Designer : طراحی UI برای کیوی KivEnt : موتور بازی سازی مبتنی بر بنیاد برای کیوی Garden : ایجاد و نگهداری ویجت ها و کتابخانه ها توسط کاربر Kivy - sdk - packager : اسکریپت برای نسل Kivy SDK در ویندوز، OS X و لینوکس Kivy - remote - shell : برنامه پوسته تعاملی SSH + Python از راه دور پیش نیازهای توسعه اپلیکیشن با Kivy اگر به فکر توسعه اپلیکیشن اندروید یا ios با استفاده از Kivy هستید بهتر است که درک درست و خوبی از برنامه نویسی پایتون داشته باشید. البته این نکته رو هم بگم قرار نیست ابتدا یک متخصص پایتون تبدیل شوید و بعد سمت Kivy بروید. اما سعی کنید در مورد فایل های docs و API ها اطلاعات داشته و آشنایی با الگوهای MVC کسب کنید. همچنین باید برخی از API را که Kivy پوشش نمی دهند، مانند GPS یا نوتیفیکیشن ها را یاد بگیرید. مفاهیم سطح بالا مانند رایج ترین دستگاه ها با هر سیستم عامل و نحوه اجرای شبیه سازها را تا حدودی آشنایی داشته باشید ساختار کلی kivy : به مثال زیر توجه کنید import kivy from kivy . app import App from kivy . uix . button import Button from kivy . uix . gridlayout import GridLayout class TestApp ( App ) : def build ( self ) : Method return Button ( text =' hello world ') Method root = GridLayout ( my _ btn = Button ( text =' hello world ') root . add _ widget ( my _ btn ) return root if _ name _ = '_ main _': TestApp ( . run ( برای اجرا شدن فایل کیوی پس از import کردن موارد مورد نیاز باید یک کلاس که ورودی آن برابر App است درست کنیم سپس یک تابع به نام build بسازیم. کیوی برای متوجه شدن گرافیک و ظاهر برنامه نیاز دارد که تمام ابزارک ها و توابع را به صورت درختی دسته بندی کند برای انجام این کار ما از تابع build استفاده میکنیم. درون تابع build میتوانیم یک ابزارک را برگردانیم) return (کنیم یا توسط root ( صفحه جاری ( و تابع add _ widget ابزارک مورد نیاز را به صفحه اضافه کنیم. توجه داشته باشید که باید نوع root را مشخص کنید همانطور که در کد بالا میبینید root برابر با GridLayout است. ابزارک های سطح تمام ابزارک های که جزو ظاهر برنامه حساب میشوند درون kivy . uix قرار دارد ما در این پست چند تا از مهمترین ابزارک ها را نشان میدهیم و بعدا در قسمت تخصصی Kivy ابزارک های که متشکل از چند ابزارک اند را به صورت کامل توضیح خواهیم داد. ابزارک Label : اولین ابزارکی که میخواهیم بررسی کنیم Label است. خب Label یکورودی با نام text میگیرد این ورودی متنی است که درون Label نمایش داده می شود. Label ( text =' Hello World ') ورودی text میتواند متن را به صورت Bold , Italic , Underline نمایش دهد اما برای فعال کردن این قابلیت باید ورودی markup را برابر True قرار دهیم و قسمتی از متن که میخواهیم به سه صورت ذکر شده نمایش داده شود همانند Html درون دو تگ قرار میدهیم تنها تفاوتی که با زبان Html دارد این است که ما تگ ها را درون قرار میدهیم اما در Kivy درون ] tag [قرار میدهیم. برای Bold کردن از تگ [ b ] [ b /] برای Italic کردن از تگ [ i ] [ i /] و برای از کشیدن خط بر روی متن از تگ [ u ] [ u /] استفاده می کنیم. برای مثال میخواهیم بخشی از متن Label ما Bold شود: Label ( text =' Hello [ b ] World [/ b ] ', markup = True ) در نتیجه هنگام اجرا متن نمایش داده شده همانند این متن خواهد بود Hello World دیگر تگ هایی که میتوان برای متن استفاده کرد عبارتند از: [ s ] world [/ s ] ٫ تغییر فونت: [ font = usr / share / fonts / IranNastaliq . ttf ] world [/ font ] ٫ تایین زبان متن: [ text _ language = en ] world [/ text _ language ] ٫ تغییر اندازه متن: [ size = ] world [/ size ] ابزارک Button : رای اضافه کردن Button به کدمان اول آن را از طریق kivy . uix فراخوانی میکنیم from kivy . uix . button import Button بر اساس گفته خود سایت Kivy دکمه ها ) Button (همان Label هستند با این تفاوت که میتوانند عملی را انجام دهند. در نتیجه این حرف میتوانیم ت یید کنیم که تمام تگ هایی که در text در ابزارک Label استفاده می شد را در Button نیز می توانیم استفاده کنیم. دکمه ها دارای سه حالت هستند برای صدا زدن تابعی هستند on _ press , onrelease , on _ state به مثال زیر توجه کنید. from kivy . app import App from kivy . uix . button import Button class test ( App ) : def callback ( self , val ) : print (" val is { ". format ( val . text ) ) def build ( self ) : my _ btn = Button ( text =' [ size = ] Hello world [/ size ] ', markup = True ) my _ btn . bind ( on _ press = self . callback ) return my _ btn test ( . run ( on _ press : همانطور که از نامشان پیداس on _ press یعنی هنگامی که ابزارک فشرده شود و on _ release به معنی هر گاه ابزارک رها شد خب برای اتصال تابع callback به دکمه باید از تابع bind استفاده کنیم که ما در این مثال on _ press دکمه my _ btn را مامور صدا زدن تابع callback کردیم. همانطور که میبینید تابع دو ورودی به نام self و val دارد ورودی self به خاطر وجود این تابع درون یک کلاس است اما ورودی val تمام صفات دکمه ای که این تابع را صدا زده به همراه دارد برایمثال ما گفتهایم هرگاه تابع صدا زده شد text همان ابزارکی که آنراصدا کرده را چاپ کن. توجه داشت باشید نحوه اتصال دادن حالت on _ release هم همانند on _ press است . اما on _ state با این دو فرق دارد به مثال زیر دقت کنید from kivy . app import App from kivy . uix . button import Button class test ( App ) : def callback ( self , ins , val ) : print (" val is { state is {". format ( val . text , ins ) ) def build ( self ) : my _ btn = Button ( text =' [ size = ] Hello world [/ size ] ', markup = True ) my _ btn . bind ( on _ state = self . callback ) return my _ btn test ( . run ( همانطور که مشاهده میکنید این مثال همانند مثال قبل است اما تابعی کهصدا کردهایم سه ورودی میگیرد این به این دلیل است که درحالت on _ state شودبه جز صفات ابزارک حالت ابزارک نیز به تابع ارسال می ابزارک Checkbox : این ابزارک همانند Button می باشد با این تفاوت که دارا دو مقدار است True و False به مثال زیر نگاه کنید تا نجوه ارسال این مقدار به تابع را متوجه شوید from kivy . app import App from kivy . uix . checkbox import CheckBox class test ( App ) : def test _ active ( self , chk , value ) : if value = True : print (" true ") else : print (" False ") def build ( self ) : chk = CheckBox ( chk . bind ( active = self . test _ active ) ابزارک Image : این ابزارک تنها یک ورودی میگیرد. تنها آدرس عکس می تواند این عکس روی کامپیوتر خود یا می تواند روی وبسایتی باشد به مثال زیر توجه کنید تا بهتر متوجه شوید from kivy . app import App from kivy . uix . image import Image class test ( App ) : def build ( self ) : img = Image ( source =" pic / . jpg ") img = Image ( source =" این وبسایت : www . example . com / . jpg ") img . reload ( return img test ( . run ( کته قابل توجه در مثال بالا تابع reload است این تابع هنگامی استفادخه می شود عکس تغییر می کند و به سیستم عامل میگوید از فایل کش استفاده نکن و فایل را دوباره لود کن ابزراک Slider : این ابزارک همانند Scroll bar است که به دو صورت افقی و عمودی موجود است همچنین می توان برای آن مقدار کمترین و بیشترین معین کرد همچنین می توان مقدار حال Slider را تایین کرد from kivy . app import App from kivy . uix . slider import Slider class test ( App ) : def build ( self ) : return Slider ( min = , max = , value = ) test ( . run ( ابزارک Progressbar : این ابزارک تنها برای نمایش میزان لود شده درون برنامه است. کتابخانه Kivy فعلا حالت افقی را پشتیبانی می کند و حالت عمودی شاید بعد ها اضافه شود from kivy . app import App from kivy . uix . progressbar import ProgressBar class test ( App ) : def build ( self ) : pb = ProgressBar ( max = ) pb . value = return pb test ( . run ( ابزارک TextInput : این ابزارک محلی است برای وارد کردن مقداری به صورت متن که در دو حالت چند خطی و تک خطی موجود است. همچنین دارای روی داد Foucs , text , text validate است به مثال زیر توجه کنید from kivy . app import App from kivy . uix . textinput import TextInput class test ( App ) : def print _ focus ( self , ins , val ) : print ( value ) def print _ on _ enter ( self , ins , val ) : print (" User press enter ", ins ) def print _ text _ change ( self , ins , val ) : print (" User change text to ", val ) def build ( self ) : txt = TextInput ( multiline = Flase , password = True , password _ mask =" - ") txt . bind ( focus = self . print _ focus ) txt . bind ( text = print _ on _ text _ change ) txt . bind ( on _ text _ validate = print _ on _ enter ) return txt test ( . run ( در مثال بالا ما یک ورودی ساختیم که حالت چند خط آن غیر فعال است و ورودی پسورد را برابر True قرار دادیم در این صورت تمام ورودی ها به صورت یک نمایش داده می شوند در password _ mask نیز حرف را قرار دادهیم این عمل باعث میشود به جای از در ورودی برای نشان ندادن رمز استفاده شود توجه داشته باشید تمام ورودی های بالا دلخواه هستند حالا به خط های بعدی نگاه کنید ما سه روی داد را به این ورودی چسبانده ایم. رویداد اول focus است که در صورتی که بر روی ورودی کلیک کنیم عمل می کند. روی داد دوم text است که در صورتی که تغییری در متن وارد شده در ورودی انجام شود عمل می کند. و رویداد اخر text validate در صورتی که اینتر زده شود اجرا می شود. با تابع ( insert _ text می توانید متنی را به ورودی اضافه کنید برای مثال: txt . insert _ text (" hello ") ابزارک ToggleButton : این ابزارک همانند RadioButton عمل می کند با این تفاوت که ظاهری همانند دکمه دارد: from kivy . app import App from kivy . uix . togglebutton import ToggleButton from kivy . uix . gridlayout import GridLayout class test ( App ) : def build ( self ) : layout = GridLayout ( col = , row _ force _ default = True , row _ default _ height = ) layout . add _ widget ( ToggleButton ( text =" first choice ", group =" t ", state =" down ") ) layout . add _ widget ( ToggleButton ( text =" second choice ", group =" t ") ) return layout test ( . run ( در صورتی که به مثال بالا نگاه کنید می بینید که ما دو ToggleButton ساخته و گروه هر دو را برابر t یعنی هر دو از یک گروه اند و سپس یکی را به صورت پیش فرض Down یا انتخاب شده گذاشته ایم. در ص. رتی که برایتان سوال پیش امده GridLayout چیست در همین حد بدانید برای قالب بندی ابزارک ها کنار یک دیگر است در بخش Layouts به انواع این لایه ها می پردازیم. ابزارک Switch : این ابزارک همانند Checkbox می ماند و دارای دو حالت فعال و غیر فعال است from kivy . app import App from kivy . uix . switch import Switch class test ( App ) : def print _ active ( self , ins , val ) : kv print (" switch is : ", val ) def build ( self ) : se = Switch ( active = True ) se . bind ( active = self . print _ active ) return se test ( . run ( لایه ها ( Layouts ) : طبق گفته سایت Kivy لایه ها ابزارک هایی هستند که عمل خاصی انجام نمی دهند بلکه فقط فرزندان خود ) ابزارک های درون آنشان (را به شکلی خاص می چینند. توجه داشته باشید تمام لایه ها دارای یک سری دستورات پایه هستند layout . add _ widget ( widget ) همچنین با تابع add _ widget می توانیم ابزارکی را اضافه کنیم. این تابع یک ورودی می گیرید آن هم متغیری که هاوی ابزارک باشد layout . remove _ widget ( widget ) همچنین با تابع remove _ widget می توانیم ابزارکی را پاک کنیم. این تابع یک ورودی می گیرید آن هم متغیری که هاوی ابزارک باشد layout . clear _ widget ( تابع clear _ widget تمام ابزارک های درون لایه را پاک می کند. لایه Float : یکی از پر کاربرد ترین لایه ها FloatLayouts است زیرا در این لایه ابزارک ها هستند که موقعیت و اندازه خود را تایین می کنند و برنامه نویس آزاد تر است و راحت تر می تواند هر ابزارک را در جاهای مختلف قرار دهد به مثال زیر توجه کنید from kivy . app import App from kivy . uix . label import Label from kivy . uix . floatlayout import FloatLayout from kivy . uix . button import Button class test ( App ) : def build ( self ) : fl = FloatLayout ( size = , ) ) btn = Button ( text =" hello ", size _ hint = . , . ) pos = ( , ) ) fl . add _ widget ( btn ) lbl = Label ( text =" label hello ", pos = , ) ) fl . add _ widget ( lbl ) retrun fl test ( . run ( در مثال بالا یک لایه Float ساختیم که سایز آن در پیکسل است، سپس یک دکمه که عرض آن برار و طول آن برابر از لایه اختصاص داده شده است و موقعیت آن در x و y برابر px است سپس با استفاده از دستور add _ widget ( btn ) متغییر btn که حاوی Object از نوع Button است را به لایه اضافه می کنیم سپس Label ساختیم که موقعیت x آن برابر px و موقعیت y آن برابر px است. نکته ای که توجه را جلب می کند این است چگونه یک جا اندازه ( Size ) با پیکسل تایین شده و در جای دیگر با درصد؟ در صورتی که شما از ورودی size _ hint استفاده کنید سایز به درصد است و تنها عددی بین تا را پذیرا می باشد و در صورتی ککه تنها از ورودی size استفاده کنید ورودی به پیکسل می باشد این عمل در ورودی pos نیز قابل انجام است یعنی در صورت استفاده از pos _ hint اعداد به درصد بوده و در صورت استفاده از ورودی pos اعداد به پیکسل است لایه Anchor : این لایه ابزارک های درون خود را می تواند به جهت های وسط، چپ، راست، بالا، پایین درون خود قرار دهد همچنین هر Anchor Layout تنها یک ابزارک می پذیرد زیرا تنها می توان یک بار موقعیت برای ابزارک ها تایین کرد به مثال زیر نگاه کنید from kivy . app import App from kivy . uix . label import Label from kivy . uix . floatlayout import FloatLayout from kivy . uix . anchorlayout import AnchorLayout from kivy . uix . button import Button class test ( App ) : def build ( self ) : fl = FloatLayout ( anchor _ rb = AnchorLayout ( anchor _ x =' right ', anchor _ y =' bottom ') btn = Button ( text =' Hello World ', size = , ) size _ hint = ( None , None ) ) anchor _ rb . add _ widget ( btn ) fl . add _ widget ( anchor _ rb ) anchor _ lc = AnchorLayout ( anchor _ x =' left ', anchor _ y =' center ') lbl = Label ( text =" Am i a Label ? ", size = , ) size _ hint = ( None , None ) ) anchor _ lc . add _ widget ( lbl ) fl . add _ widget ( anchor _ lc ) return fl test ( . run ( همانطور که مشاهده می کنید Anchor دو ورودی می گیرد anchor _ x که می توان ورودی آن را برابر با top , center , bottom باشد و anchor _ y که ورودی های آن می تواند برابر با left , center , right باشد. لایه Box : این لایه ابزارک ها را به صورت عمودی یا افقی کنار هم قرار می دهد from kivy . app import App from kivy . uix . boxlayout import BoxLayout from kivy . uix . button import Button class test ( App ) : def build ( self ) : layout = BoxLayout ( orientation =' vertical ') btn = Button ( text =' Hello ') btn = Button ( text =' World ') layout . add _ widget ( btn ) layout . add _ widget ( btn ) return layout test ( . run ( همانطور که در مثال بالا می بینید BoxLayout یک ورودی ی گیرد که میتوان آن را برابر vertical ( افقی) horizontal )عمودی (قرار داد در این مثال برابر vertical است سپس دو دکمه به لایه اضافه کرده ایم. لایه Grid : این لایه همانند table است دارای row و column است می توان تعداد ستون ( col ) را مشخص کرد اما تعداد row به نسبت تعداد ابزارک ها تایین می شود from kivy . app import App from kivy . uix . boxlayout import BoxLayout from kivy . uix . button import Button class test ( App ) : def build ( self ) : layout = GridLayout ( cols = , row _ force _ default = True , row _ default _ height = ) layout . add _ widget ( Button ( text =' Hello ', size _ hint _ x = None , width = ) ) layout . add _ widget ( Button ( text =' World ') ) layout . add _ widget ( Button ( text =' Hello ', size _ hint _ x = None , width = ) ) layout . add _ widget ( Button ( text =' World ') ) return layout test ( . run ( ورودی row _ force _ default باعث می شود لایه توجهی به اندازه و عرض ابزارک نکند، row _ default _ height ارتفاع تمام ابزارک ها را تایین می کند. برای اینکه بتوانیم عرض مورد نظر را برای ابزارک تایی کنیم size _ hint _ x را برابر none قرار می دهیم و سپس عرض مورد نیاز را به صورت پیکسل وارد می کنیم. رویداد ها: در Kivy رویداد ایی وجود دارند که مخصوص برنامه است یکی از دلایل محبوبیت Kivy وجود همین رویداد ها است def on _ start ( self ) : def on _ stop ( self ) : def on _ resume ( self ) : def on _ pause ( self ) : قبل از شروع به توضیح دادن هر تابع به یاد داشته باشید که این تابع ها باید در همان کلاسی استفاده شوند که build است رویداد وجود دارد اولی آن ها on _ start است این تابع زمانی اجرا می شود که برنامه اجرا می شود سپس on _ stop زمانی است که شما برنامه را از Catch پاک می کنید توجه داشته باشید این توابع بیشتر برای اندروید کاربرد دارند. تابع on _ pause زمانی اجرا می شود که از برنامه بیرون می روید ولی درون Catch قرار دارد. تابع on _ resume برای موقعی که برنامه درون Catch قرار دارد و برنامه دوباره اجرا می شود اسن توابع بسیار کاربرد دارند و به همین دلیل است که این کتابخونه نسبت به دیگر کتابخوه های مخصوص اندروید برتری دارد البت دلایل دیگری برای برتری این کتابخونه نیز وجود دارد.