<?xml version="1.0" encoding="UTF-8"?><rss version="2.0"><channel><title>نوشته های alinosrati3000</title><link>https://virgool.ir/feed/@alinosrati3000</link><description></description><language>fa</language><pubDate>2026-11-11 18:49:52</pubDate><image><url>https://virgool.ir/images/default-avatar.jpg</url><title>alinosrati3000</title><link>https://virgool.ir/@alinosrati3000</link></image><item><title>کتابخانه kivy برای اندروید درپایتون</title><link>https://virgool.ir/@alinosrati3000/کتابخانه-kivy-برای-اندروید-درپایتون-mib6b4nkjdsx</link><description>نام: علینام خانوادگی: نصرتی نوشنقدرس: برنامه سازی سیستمموضوع: کتابخانه kivy برای اندروید درپایتوناستاد: آقای داوود یعقوبی تباردانشگاه : صدرا سال: ۱۳۹۹کیوی یک کتابخانهٔ آزاد و متن باز از زبان برنامه نویسی پایتون است که برای توسعهٔ نرمافزارهای چند لمسی با رابط کاربری زیبا توذیع شده است.کیوی میتواند روی لینوکس، مک، ویندوز، اندروید، آیاواس اجرا شود. کیوی تحت MIT license ارائه شده و رایگان و کد بازاست .کیوی فریمورک اصلی توسعه داده شده توسط بنیاد کیوی است،در کنار پایتون برای اندروید، Kivy iOS و کتابخانههای بسیار دیگری که برای استفادهٔ کراس پلتفورم ساخته شدند.در سال ۲۱۹۲ میلادی، کیوی ۰۱۱۱ دلار از بنیاد پایتون دریافت کرد برای انتقال به نسخه ۹ پایتون کیوی همچنین از رزبری پای نیز پشتیبانیمی کند .فریم کاری شامل تمام امکانات برای ساخت این گونه نرمافزارها است : پشتیبانی کامل از ورودیهای موس، کیبورد و ورودیهای لمسیمخصوص سیستم عامل کتابخانهٔ گرافیک فقط شامل اوپن جی ال ابزارکهای گرافیکی بسیار گسترده که از تکنولوژی چند لمسیپشتیبانی میکنند زبان برنامهنویسی اختصاصی Kv که برای راحتی در توسعهٔ محیطکاربری طراحی شده کیوی ارتقا یافتهٔ PyMT project است و برای پروژههای جدید پیشنهاد می شود.در حالت عادی اندروید از از برنامهنویسی بومی Python پشتیبانی نمی کند اما شما می توانید با استفاده از ابزارهای موجود، برنامه هایی در این زبان بنویسید و بعد آن را به APK تبدیل کنید که به صورت موفقیت آمیز بر روی دستگاههای اندروید قابل اجرا هستند .در بالا گفتیم ابزاری وجود دارد که به ما کمک می کند برنامه با زبان پایتون بنویسیم و آن را به APK تبدیل کنیم . Kivy یکی از محبوبترین و قدرتمندترین راه حلها برای این کار است. نه تنها این برنامه به صورت متن باز است، نه تنها از ویندوز، Mac ، لینوکس و iOS ، جدای از اندروید،پشتیبانی می کند، بلکه به گونهای طراحی شده است که شما را به برنامه نویسی سریع ترغیب کند. شما میتوانید از آن به عنوان ابزار نمونهسازی استفاده کنید و این کار را با تنها چند خط کد انجام دهید .Kivy یک کتابخانه متن باز پایتون برای توسعه سریع اپلیکیشن ها است که از رابط کاربری نوآورانه مانند اپلیکیشن های multi-touch استفاده می کند.کتابخانه Kivy به شما امکان می دهد از پایتون برای ایجاد اپلیکیشن برای دستگاه های تلفن همراه و دسکتاپ استفاده کنید Kivy کد شما را دریافت می کند و اپلیکیشن ها را از منطق شما ایجاد می کند. سپس، در هر برنامه و APK ، می توانید پایتون را نصب کنید.ویژگی های بارز Kivy : 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 2 ساخته شده و با استفاده از یک خط لوله مدرن و سریع کار می کند. این ابزار با بیش از بیست ویجت همراه می باشد که همه آن موارد بسیار قابل گسترش هستند. بسیاری از قطعات در 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 kivyfrom kivy.app import Appfrom kivy.uix.button import Buttonfrom kivy.uix.gridlayout import GridLayoutclass TestApp(App):def build(self):# Method 1# return Button(text=&#39;hello world&#39;)# Method 2root = GridLayout()my_btn = Button(text=&#39;hello world&#39;)root.add_widget(my_btn)return rootif __name__ == &#39;__main__&#39;:TestApp ().run ()برای اجرا شدن فایل کیوی پس از import کردن موارد مورد نیاز باید یک کلاس که ورودی آن برابر App است درست کنیم سپس یک تابع به نام build بسازیم . کیوی برای متوجه شدن گرافیک و ظاهر برنامه نیاز دارد که تمام ابزارک ها و توابع را به صورت درختی دسته بندی کند برای انجام این کار ما از تابع build استفاده میکنیم . درون تابع build میتوانیم یک ابزارک را برگردانیم ) return ( کنیم یا توسط root ( صفحه جاری ( و تابع add_widget ابزارک مورد نیاز را به صفحه اضافه کنیم . توجه داشته باشید که باید نوع root را مشخص کنید همانطور که در کد بالا میبینید root برابر با GridLayout است.ابزارک های سطح ۱تمام ابزارک های که جزو ظاهر برنامه حساب میشوند درون kivy.uix قرار دارد ما در این پست چند تا از مهمترین ابزارک ها را نشان میدهیم و بعداً در قسمت تخصصی Kivy ابزارک های که متشکل از چند ابزارکاند را به صورت کامل توضیح خواهیم داد.ابزارک Label :اولین ابزارکی که میخواهیم بررسی کنیم Label است . خب Label یکورودی با نام text میگیرد این ورودی متنی است که درون Labelنمایش داده می شود.Label(text=&#39;Hello World&#39;)ورودی text میتواند متن را به صورت Bold,Italic,Underline نمایش دهد اما برای فعال کردن این قابلیت باید ورودی markup را برابر True قرار دهیم و قسمتی از متن که میخواهیم به سه صورت ذکر شده نمایش داده شود همانند Html درون دو تگ قرار میدهیم تنها تفاوتی که با زبان Html دارد این است که ما تگ ها را درون قرار میدهیم اما در Kivy درون ] tag [ قرار میدهیم.برای Bold کردن از تگ [b][b/] برای Italic کردن از تگ [i][i/] و برای از کشیدن خط بر روی متن از تگ [u][u/] استفاده می کنیم.برای مثال میخواهیم بخشی از متن Label ما Bold شود:Label(text=&#39;Hello [b]World[/b]&#39;,markup=True)در نتیجه هنگام اجرا متن نمایش داده شده همانند این متن خواهد بودHello Worldدیگر تگ هایی که میتوان برای متن استفاده کرد عبارتند از:[s] world [/s]۲٫ تغییر فونت:[font=/usr/share/fonts/IranNastaliq.ttf]world[/font]۹٫ تایین زبان متن:[text_language=en]world[/text_language]۴٫ تغییر اندازه متن:[size=12]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 Appfrom kivy.uix.button import Buttonclass test(App):def callback(self,val):print(&#34;val is {} &#34;.format(val.text))def build(self):my_btn = Button(text=&#39;[size=12]Hello world[/size]&#39;,markup=True)my_btn.bind(on_press=self.callback)return my_btntest().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 Appfrom kivy.uix.button import Buttonclass test(App):def callback(self,ins,val):print(&#34;val is {} state is {}&#34;.format(val.text,ins))def build(self):my_btn = Button(text=&#39;[size=12]Hello world[/size]&#39;, markup=True)16my_btn.bind(on_state=self.callback)return my_btntest().run()همانطور که مشاهده میکنید این مثال همانند مثال قبل است اما تابعی کهصدا کردهایم سه ورودی میگیرد این به این دلیل است که درحالتon_state شودبه جز صفات ابزارک حالت ابزارک نیز به تابع ارسال میابزارک Checkbox :این ابزارک همانند Button می باشد با این تفاوت که دارا دو مقدار است True و False به مثال زیر نگاه کنید تا نجوه ارسال این مقدار به تابع را متوجه شویدfrom kivy.app import Appfrom kivy.uix.checkbox import CheckBoxclass test(App):def test_active(self,chk,value):if value==True:print(&#34;true&#34;)else:print(&#34;False&#34;)def build(self):chk = CheckBox()chk.bind(active=self.test_active)ابزارک Image :این ابزارک تنها یک ورودی میگیرد . تنها آدرس عکس می تواند این عکس روی کامپیوتر خود یا می تواند روی وبسایتی باشد به مثال زیر توجه کنید تا بهتر متوجه شویدfrom kivy.app import Appfrom kivy.uix.image import Imageclass test(App):def build(self):img = Image(source=&#34;pic/1.jpg&#34;)# img = Image(source=&#34;https://www.example.com/1.jpg&#34;)img.reload()return imgtest().run()کته قابل توجه در مثال بالا تابع reload است این تابع هنگامی استفادخهمی شود عکس تغییر می کند و به سیستم عامل میگوید از فایل کشاستفاده نکن و فایل را دوباره لود کنابزراک Slider :این ابزارک همانند Scroll bar است که به دو صورت افقی و عمودیموجود است همچنین می توان برای آن مقدار کمترین و بیشترین معینکرد همچنین می توان مقدار حال Slider را تایین کردfrom kivy.app import Appfrom kivy.uix.slider import Sliderclass test(App):def build(self):return Slider(min=0,max=100,value=25)test().run()ابزارک Progressbar :این ابزارک تنها برای نمایش میزان لود شده درون برنامه است. کتابخانه Kivy فعلا حالت افقی را پشتیبانی می کند و حالت عمودی شاید بعد ها اضافه شودfrom kivy.app import Appfrom kivy.uix.progressbar import ProgressBarclass test(App):def build(self):pb = ProgressBar(max=1000)pb.value = 75019return pbtest().run()ابزارک TextInput :این ابزارک محلی است برای وارد کردن مقداری به صورت متن که دردو حالت چند خطی و تک خطی موجود است . همچنین دارای روی دادFoucs , text, text validate است به مثال زیر توجه کنیدfrom kivy.app import Appfrom kivy.uix.textinput import TextInputclass test(App):def print_focus(self,ins,val):print(value)def print_on_enter(self,ins,val):print(&#34;User press enter&#34;,ins)def print_text_change(self,ins,val):print(&#34;User change text to &#34;,val)def build(self):txt1 = TextInput(multiline=Flase,password=True,password_mask=&#34;-&#34;)txt1.bind(focus=self.print_focus)20txt1.bind(text=print_on_text_change)txt1.bind(on_text_validate=print_on_enter)return txt1test().run()در مثال بالا ما یک ورودی ساختیم که حالت چند خط آن غیر فعال است و ورودی پسورد را برابر True قرار دادیم در این صورت تمام ورودی ها به صورت یک * نمایش داده می شوند در password_mask نیز حرف – را قرار دادهیم این عمل باعث میشود به جای * از – در ورودی برای نشان ندادن رمز استفاده شود توجه داشته باشید تمام ورودی های بالا دلخواه هستند حالا به خط های بعدی نگاه کنید ما سه روی داد را به این ورودی چسبانده ایم. رویداد اول focus است که در صورتی که بر روی ورودی کلیک کنیم عمل می کند . روی داد دوم text است که در صورتی که تغییری در متن وارد شده در ورودی انجام شود عمل می کند . و رویداد اخر text validate در صورتی که اینتر زده شود اجرا می شود . با تابع ()insert_text می توانید متنی را به ورودی اضافه کنید برای مثال:txt1.insert_text(&#34;hello&#34;)ابزارک ToggleButton :این ابزارک همانند RadioButton عمل می کند با این تفاوت که ظاهری همانند دکمه دارد:from kivy.app import Appfrom kivy.uix.togglebutton import ToggleButtonfrom kivy.uix.gridlayout import GridLayoutclass test(App):def build(self):layout=GridLayout(col=2,row_force_default=True,row_default_height=40)layout.add_widget(ToggleButton(text=&#34;first choice&#34;,group=&#34;t&#34;,state=&#34;down&#34;))layout.add_widget(ToggleButton(text=&#34;second choice&#34;,group=&#34;t&#34;))return layouttest().run()در صورتی که به مثال بالا نگاه کنید می بینید که ما دوToggleButton ساخته و گروه هر دو را برابر t یعنی هر دو از یکگروه اند و سپس یکی را به صورت پیش فرض Down یا انتخاب شدهگذاشته ایم. در ص.رتی که برایتان سوال پیش امده GridLayout چیستدر همین حد بدانید برای قالب بندی ابزارک ها کنار یک دیگر است دربخش Layouts به انواع این لایه ها می پردازیم .ابزارک Switch :این ابزارک همانند Checkbox می ماند و دارای دو حالت فعال و غیرفعال استfrom kivy.app import Appfrom kivy.uix.switch import Switchclass test(App):def print_active(self,ins,val):kvprint(&#34;switch is : &#34;,val)def build(self):se=Switch(active=True)se.bind(active=self.print_active)return setest().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 Appfrom kivy.uix.label import Labelfrom kivy.uix.floatlayout import FloatLayoutfrom kivy.uix.button import Buttonclass test(App):24def build(self):fl = FloatLayout(size=(300,300))btn = Button(text=&#34;hello&#34;,size_hint=(0.1,0.2),pos=(10,10))fl.add_widget(btn)lbl1 = Label(text=&#34;label hello&#34;,pos=(40,50))fl.add_widget(lbl1)retrun fltest().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 Appfrom kivy.uix.label import Labelfrom kivy.uix.floatlayout import FloatLayoutfrom kivy.uix.anchorlayout import AnchorLayoutfrom kivy.uix.button import Buttonclass test(App):def build(self):fl = FloatLayout()anchor_rb = AnchorLayout(anchor_x=&#39;right&#39;, anchor_y=&#39;bottom&#39;)btn = Button(text=&#39;Hello World&#39;, size=(100, 100), size_hint=(None, None))anchor_rb.add_widget(btn)fl.add_widget(anchor_rb)26anchor_lc = AnchorLayout(anchor_x=&#39;left&#39;, anchor_y=&#39;center&#39;)lbl = Label(text=&#34;Am i a Label ?&#34;, size=(100, 100), size_hint=(None, None))anchor_lc.add_widget(lbl)fl.add_widget(anchor_lc)return fltest().run()همانطور که مشاهده می کنید Anchor دو ورودی می گیرد anchor_xکه می توان ورودی آن را برابر با top ,center ,bottom باشد وanchor_y که ورودی های آن می تواند برابر با left, center, rightباشد .لایه Box :این لایه ابزارک ها را به صورت عمودی یا افقی کنار هم قرار می دهدfrom kivy.app import Appfrom kivy.uix.boxlayout import BoxLayoutfrom kivy.uix.button import Buttonclass test(App):def build(self):layout = BoxLayout(orientation=&#39;vertical&#39;)27btn1 = Button(text=&#39;Hello&#39;)btn2 = Button(text=&#39;World&#39;)layout.add_widget(btn1)layout.add_widget(btn2)return layouttest().run()همانطور که در مثال بالا می بینید BoxLayout یک ورودی ی گیرد که میتوان آن را برابر vertical( افقی ) ,horizontal )عمودی( قرار داد در این مثال برابر vertical است سپس دو دکمه به لایه اضافه کرده ایم.لایه Grid :این لایه همانند table است دارای row و column است می توان تعداد ستون (col) را مشخص کرد اما تعداد row به نسبت تعداد ابزارک ها تایین می شودfrom kivy.app import Appfrom kivy.uix.boxlayout import BoxLayoutfrom kivy.uix.button import Buttonclass test(App):def build(self):layout = GridLayout(cols=2, row_force_default=True, row_default_height=40)28layout.add_widget(Button(text=&#39;Hello 1&#39;, size_hint_x=None, width=100))layout.add_widget(Button(text=&#39;World 1&#39;))layout.add_widget(Button(text=&#39;Hello 2&#39;, size_hint_x=None, width=100))layout.add_widget(Button(text=&#39;World 2&#39;))return layouttest().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):29def on_pause(self):قبل از شروع به توضیح دادن هر تابع به یاد داشته باشید که این تابع ها باید در همان کلاسی استفاده شوند که build است ۴ رویداد وجود دارد اولی آن ها on_start است این تابع زمانی اجرا می شود که برنامه اجرامی شود سپس on_stop زمانی است که شما برنامه را از Catch پاک می کنید توجه داشته باشید این توابع بیشتر برای اندروید کاربرد دارند.تابع on_pause زمانی اجرا می شود که از برنامه بیرون می روید ولی درون Catch قرار دارد. تابع on_resume برای موقعی که برنامه درون Catch قرار دارد و برنامه دوباره اجرا می شود اسن توابع بسیار کاربرد دارند و به همین دلیل است که این کتابخونه نسبت به دیگر کتابخوه های مخصوص اندروید برتری دارد البت دلایل دیگری برای برتری این کتابخونه نیز وجود دارد .</description><category>alinosrati3000</category><author>alinosrati3000</author><pubDate>Wed, 03 Jun 2020 12:07:19 +0430</pubDate></item></channel></rss>