
اگر چیزی درباره فریم ورک کیوی (kivy) نمیدانید شاید کمی برایتان درک ساختار Event ها و properties سخت باشد پس بهتر است مقاله های کتابخانه کیوی (kivy) ، فریم ورک kivy و مهندسی فریم ورک کیوی را مطالعه کنید.
Events یا رویداد ها
رویداد های ورودی (kivy) در کیوی (kivy) بسیار حائز اهمیت است .
اما شاید شما که در این زمینه بسیار با تجربه نیستید باورش برایتان سخت باشد .
اما کمی که بیشتر با کیوی آشنا شدید متوجه می شوید که این رویداد های ورودی بسیار کار آمد هستند.
و بسیاری از کار ها در برنامه های شما با این رویداد ها انجام میشود اعم از ورودی ها .
در تصویر زیر کاربرد Event ها را به صورت شکل تعریف کردیم.

اگر بخواهم تصویر بالا را تفصیر کنم باید بگویم که :
نخست برنامه ورودی ها را از طریق Event ها حالا به هر طریقی که هست می گیرد .
در مرحله دوم ثبت می کند ورودی را با روش های مختلف مانند کلیک و لمس (touch) .
سپس ورودی ها را پردازش کرده و بسته به کاربرد ورودی آن را به کار می گیرد.
در آخر آنها را به صورت GUI یا گرافیکی نمایش میدهد.
آشنایی با Event Dispatcher یا ثبت کننده رویداد ها
یکی از مهمترین کلاس های پایه ، این چهارچوب کلاسِ Event Dispatcher میباشد.
این کلاس به شما این امکان را میدهد که انواع رویداد ها یا Event هارا ثبت کنید.
و آنها را به دیگر ثبت کننده های دیگر ارسال کنید .
به طور مثال ویجت های کلاس های clock و motion از جمله توزیع کننده های رویداد ها (Events) هستند.
و مانند تصویر بالا اشیاء Event Dispatcher به داخل حلقه Main یا اصلی میروند برای تولید و هندل (Handle) شدن.
Main loop یا حلقه اصلی
همانطور که در تصویر بالا بیان شد یک حلقه وجود دارد که تنها زمانی که از برنامه خارج میشویم از برنامه خارج میشود.
و در تمام طول برنامه اجرا میشود.
در حلقه ، در هر تکرار از ورودی کاربر ، سنسور های سخت افزاری یا چند (sources) منبع دیگر ایجاد میشود و سپس فریم ها به صفحه نمایش داده میشود.
برنامه شما تماس های برگشتی به (به طور مثال میتوانیم به بند بعدی اشاره کنیم) مشخص میکند تا توسط حلقه اصلی فراخوانی شود ؛ ولی اگر پاسخ طول کشید یا پاسخی دریافت نکردید حلقه اصلی خراب است و دیگر کار نخواهد کرد .
شما در kivy نباید از حلقه های نامتناهی یا طولانی یا حلقه هایی که میخوابند استفاده کنید کد زیر مثالی از دو مورد است :
while True:
animate_something()
time.sleep(.10)
زمانی که شما کار بالا را انجام میدهید کد شما پاسخی نخواهد داد و شما جز صفحهای سیاه چیز دیگری نخواهید دید.
ولی در عوض شما باید عملکرد()mate_something را مدام برنامه ریزی کنید تا بارها و بارها فراخوانی شود.
و شما قادر به داشتن تعامل با آن پنجره نخواهید بود.
برنامه ریزی یک رویداد ( Event )
شما با استفاده است schedule_interval() می توانید X بار در ثانیه تابع ها و یا متود هارا صدا بزنید .
به طور مثال شما در کد زیر خواهید دید که تابعی به نام my_callback را 30 بار در ثانیه فراخوانی میکنیم:
def my_callback(dt):
print (‘My callback is called’,dt)
event = Clock.schedule_interval(my_callback, 1 / 30.)
شما برای عدم برنامه ریزی چند روش دارید که عبارت اند از ()cancel یا ()unschedule :
event.cancel
یا
Clock.unschedule(event)
از طرف دیگر شما می توانید پاسخ خود را به صورت false بازگردانید تا برنامه شما به صورت خودکار برنامه ریزی نشود:
count = 0
def my_callback(dt):
global count
count += 1
if count == 10:
print (‘ Last call of my callback, bye bye ! ‘)
return False
print (‘My callback is called’)
Clock.schedule_interval(my_callback, 1 / 30.)
برنامه ریزی یک رویداد (یک بار)
با استفاده از schedule_once() میتوانید یک تابع را بعد از قاب قبلی در X ثانیه صدا بزنید :
def my_callback(dt):
print ‘My callback is called !’ Clock.schedule_once(my_callback, 1)
Clock.schedule_once(my_callback, 1)
با این کار my_callback در یک ثانیه صدا زده میشود .
در آرگومان دوم میزان زمان قبل از صدا زدن تابع در چند ثانیه است .
با این حال در آرگومان دوم شما میتوانید به نتایج دیگری با مقادیر دیگری برسید:
اگر X از 0 بیشتر باشد در X ثانیه callback داده میشود.
اگر X برابر با 0 باشد فریم بعدی بعدا فراخوانی می شود.
اگر X برابر 1- باشد قبل از فریم بعدی callback داده می شود.
1- بیشتر وقتی مورد استفاده قرار میگیرد که شما از قبل یک برنامه ریزی کرده اید و وقتی میخواهید تا قبل از برنامه صدا زده شود فریم بعد نمایش داده شود.
روش دوم برای تکرار صدا زدن یک تابع این است که برای اولین بار یک callback را با schedule_once() و صدا زدن دوم این عملکرد با callback:
def my_callback(dt):
print (‘My callback is called !’)
Clock.schedule_once(my_callback, 1)
Clock.schedule_once(my_callback, 1)
در حالی که main loop سعی خواهد کرد که برنامه را مطابق در خواست خود نگه دارد .
اما عدم اطمینان در مورد صدا زدن تابع با برنامه ریزی دقیقا وجود دارد .
بعضی اوقات callback یا کار دیگر در برنامه بیشتر از زمان پیش بینی شده طول می کشد و بنابراین زمان بندی می تواند کمی خاموش باشد .
در راه حل دوم برای مشکل پاسخ به تکرار بعدی حداقل یک ثانیه پس از از پایان آخرین تکرار فراخوانی می شود.
با این وجود با schedule_interval() پاسخ به هر ثانیه خوانده می شود.
برای اطلاعات بیشتر از مهندسی و ساختار Event ها به kivy.org مراجعه فرمایید .
مقالات بیشتر:

دستهها
- آمار و ریاضیات (۳)
- امنیت (۱)
- بیگ دیتا (۴)
- پایتون (۱۷)
- پردازش تصویر (۱)
- پردازش زبان طبیعی (۱)
- داده کاوی (۳)
- داکر (۸)
- دیتابیس (۷)
- سیستم عامل (۷)
- شبکه عصبی مصنوعی (۶)
- طراحی وب (۱۹)
- علم داده (۱۰)
- کاربرد های پایتون (۶)
- کتابخانه ها / ماژول ها (۱۶)
- کلاس بندی (۸)
- مقالات (۱۱۶)
- نرم افزار های دسکتاپ (۱)
- هوش مصنوعی (۴۸)
- یادگیری عمیق (۲۹)
- یادگیری ماشین (۴۴)
داداش دمت گرم من متوجه نشدم البته دانششو نداشتم ولی کارات عالیه