منوهای نصب در پنل مدیریت

Event ها و Properties در Kivy

Event ها چیستند و کاربرد آنها چیست ؟

اگر چیزی درباره فریم ورک کیوی (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 مراجعه فرمایید .

مقالات بیشتر:

نصب فریم ورک کیوی

مهندسی فریم ورک کیوی

در www.pythoniha.ir

0 0 vote
Article Rating
Subscribe
Notify of
guest
1 دیدگاه
Oldest
Newest Most Voted
Inline Feedbacks
View all comments
امیررعلی دولتی نژاد
امیررعلی دولتی نژاد
5 months ago

داداش دمت گرم من متوجه نشدم البته دانششو نداشتم ولی کارات عالیه

ورژن 4 طراحی شده با ❤  
1
0
Would love your thoughts, please comment.x
()
x