الاثنين، 13 فبراير 2012

تكوين الواجهات الرسومية بالماتلاب (Matlab graphics User Interface GUI)

يغفل اغلب الناس عن طريقة تكوين واجهات تفاعلية بالماتلاب رغم انها سهلة وبسيطة لكن لا اعرف لما..؟؟؟؟؟؟؟؟
حيت تعطي هذه الواجهات جمالا كبيرا للبرنامج وتفاعل بين المستخدم والمبرمج وتحس ايضا من خلالها بتكامل برنامجك مع المستخدم وتفاعله معه وطريقة تكوينه في الماتلاب عن طريق تكوين مشروع GUI تفاعلي بطريقة التالية
لنبدي الان بعد تشغيل الماتلاب افتح مشروع GUI جديد عن طريق الذهاب الى
file>New>GUI
ستظهر هذه الصفحة


نختر black GUI لفتح مشروع جديد ستضهر هذه النافذة ويوجد شرح عن كل اداة




ادوات التصميم: هي ادوات نحتاجها في تصميم البرنامج وهي مثل textbox,button,combobox وكثير من الادوات التي تفيدنا في التصميم
كود البرنامج: يمكنك من عرض الكود الخاص بالبرنامج

نافذة التصميم: هي النافذة التي سندرج عليها ادوات التصميم لتكوين برنامج
تنفيذ البرنامج: هو زر لتفيذ البرنامج بعد كتابته
عرض الخصائص: هو زر يمكنك من عرض خصائص كل ادة ستدرج على نافذة التصميم للتحكم بها

لنكون برنامج بسيط لنتعرف من خلاله على طريقة استخدام الخصائص وتكوين البرنامج نكون الان برنامج لجمع عددين
ندرج الادوات التالية على سطح نافذة التصميم كما هو مبين


عند الوقوف على احد الادوات ومشاهدة خصائص هذه الاداة
كما الان في زر button حيث يمثل
string البيانات المعروضه فيه
tag هو يمثل اسمه الذي نستطيع الوصول الي الاداة button عن طريق البرنامج بالكود
وهناك خصائص اخرى تتعرف عليها بنفسك كعرض الخط وتحكم بلوة الادة وغيرها






بعد ادراج كل الادوات التي نحتاجها على نافذة التصميم بقي كيف نصل الى كل اداة حيث عند الضغط عليها ينفذ الكود الخاص بها شاه هذا الشكل بالاسفل بعد الضغط على نافذة الكود وضغد على function show سيضهر لك callback لكل اداة موجودةعلى نافذة التصميم نستطيع الوصول الى اي اداة بضغط عليها من هنا سيضهر المكان الخاص بكتابة الكود لها



هنا نريد انه عندما يضغط على button سيضهر النتيجة لذالك سنكتب كودنا في
button callback

--> للوصول الى اي اداة في الماتلاب
بالبداية نجد هذه الاداة عن طريق ايجاد مقبض هذه الأداة handel لها باستخدام ايعاز findobject بطريقة التالية
hm = findobj(h, 'conditions')
تاخذ اداة findobject بارامترين
  1. الاول الخاصية التي نبحث بها
  2. والثاني اسم خاصية الكائن المطلوب
مثال:------------------------
handel1=findobj('tag','textbox1')
حيث نجد هنا مقبض اداة handel1 اسم خاصية tag لها textbox1 للتحكم بمحتوياتها

-->لجلب البيانات داخل اداة معينة نستخدم ايعازل get
get(h,'PropertyName')
*تاخذ هذه الاداة برامترين
  1. الاول handel ا للأداة لذي وجدنا باستخدام findobj
  2. وبعدها الخاصية المراد جلب قيمتها داخل هذه الاداة
مثال:لجلب محتويات textbox1 الذي وجدنا handel له وخزانها داخل متغير اسمه text
handel1=findobj('tag','textbox1')
text=get(handel1,'string')
هنا جلبنا البيانات داخل textbox الذي وجدنا handel له في خطوة السابقة وخزناها داخل متغير اسمه text


--> لوضع بيانات داخل ادة معينه نستخدم ايعاز set
set(H,'PropertyName',PropertyValue,...)
*تاخذ هذه الاداة ثلاث برامترات
  1. الاول handel الذي وجدنا باستخدام findobj للاداة ,
  2. وبعدها الخاصية المراد تغير قيمتها
  3. وثالث هي القيمة الجديدة للخاصية
مثال: لو اردنا وضع قيمة 55 داخل النص textbox السابق الذي وجدنا handel له
handel1=findobj('tag','textbox1')
set(handel1,'string','55')

مثال :لجمع محتوى edittextbox1 و edittextbox2 وعرضها داخل edittextbox3


لعرض رسالة معينة نستخدم دالة msgbox مثلا لعرض رسالة لحضة بدء تشغيل البرنامج نكتب الكود في حدث
OpeningFcn هكذا


شرح الادوات وطرقة استخدامها

1.list box او Pop-up Menu هذه الادة معروفة في لغات البرمجة فائدتها تكوين قائمة خيارات
نضيف هذه الادة على نافذة التصميم ونقوم بتعبئتها بالخيارات المطلوبة عن طريق خاصية string ونضيف كل خيار في سطر هكذا

الان قمنا بتعبئتها بالبيانات فلو اختار المستخدم واحد من هذه الخيارات لحضة التنفيذ التي ستضهر بشكل التالي

فلو اردنا تنفيذ كود معين عند الضغط على احد الخيارات فنحصل على العنصر الذي تم اختياره عن طريقة خاصية value
التي تمثل تسلسل العنصر الذي تم اختياره ضمن العناصر داخل القائمة

handel=findobj('Tag','popupmenu')%get the handel for object popupmenu
x=get(handel,'value')%get the vaule
switch x
case 1
%do some thing
end
يجب ان تكون المصفوفة عمودية اي صفة عمود واحد حت تدرج  list box او Pop-up Menu ولو اردنا وضع بيانات داخل  لذالك اذا لم تكن عمودية نحوله عمودية عن طريق (') مثلا نريد ان ندرج في هذه الاداة ارقام من الواحد للخمسة مخزونة داخل مصفوفة
exp1:
handel=findobj('Tag','popupmenu')%get the handel for object popupmenu
x=[1,2,3,4,5];
set( handel ,'string',x')

exp2:
handel=findobj('Tag', listbox ')%get the handel for object popupmenu
x=[1,2,3,4,5];
set( handel ,'string',x')



هنا نجعله ينفذ كود معين عند اختيار اول خيار في القائمة وهو خيار Only one cycle moves
2. static text,edit text نستطيع الوصول على محتويات هذه الاداة عن طريق خاصية string نقوم بواسطتها بتعبئة هذه الاداة بوسطة ايعاز set وجلب محتويات هذه الاداة بواسطة ايعاز get
handel=findobj('Tag','edittext')%get the handel for object edit text box
x=get(handel,'string')%get the vaule
set(handel,'string','hi')%set the new vaule hi in it
3. checkbox,Radio buttom هذه الاداتان لها خياران اما on معناه فعال او off معناه غير فعال نجلب قيمهما عن طريقة خاصية value وتكون اما on او off اي اما صفر او واحد (0و1)

مثال :وضع علامة صح داخل checkbox عن طريق الكود
handel=findobj('Tag','checkboxt')%get the handel for object ceck box
x=get(handel,'value') %get the vaule
set(handel,'value','on')%set check box vaule

مثال :وضع الغاءعلامة صح داخل checkbox عن طريق الكود
handel=findobj('Tag','checkboxt')%get the handel for object ceck box
x=get(handel,'value') %get the vaule
set(handel,'value','off')%set check box vaule
مثال :لمعرفة هل تم اختيار checkbox ام لا (وضعت علامة صح داخلها ام لا وعرض رسالة تبين انها مختارة ام لا
handel=findobj('Tag','checkboxt')
x=get(handel,'value')
switch x
case 1
msgbox('the check box is selected')
case 0
msgbox('the check box is not selected')
end

تمكننا هذه الاداة من الرسم على سطح النافذة فعند ادراجها واستخدام دالة الرسم Axes ا4. اداة
plot(x,y)
او غيرها من دوال الرسم فسوف يقوم برسم على هذه الاداة في المشروع
مثال:برنامج رسم دوال لنكون مشروع كما في الشكل ندرج فيه
لعرض ناتج الرسم داخلهaxes1
زر حتى عندما نضغط عليه يبدء بالرسم,pushbutton1
لادخال المعادلة التي نريد ان نرسمها,edit1
نفتح نافذة الكود للمشروع وفي حدت
pushbutton1_Callback

نكتب الكود التالي

function pushbutton1_Callback(hObject, eventdata, handles)
x=-2*pi:0.01:2*pi
htext=findobj('Tag','edit1')
xfunction=get(htext,'string')
plot(x,eval(xfunction))
شاهد نافذة البرنامج عند التنفيذ وادخال مدخلات

5.Grop Button هذه اداة شبيه frame في الفجوال بيسك ندرجها على النافذة ونضع على سطحها الادوات
وهذا مثال بسيط لاستخدام اغلب الادوات



,

هناك 8 تعليقات:

غير معرف يقول...

السلام عليكم
أشكرك جزيل الشكر
لدي سؤال هل يمكن برمجة برنامج بواسطة الماتلاب وفي نفس الوقت نبرمج واجهة رسومية لنفس البرنامج بلغة اخرى كالجافا مثلا
جزاك الله خيرا

غير معرف يقول...

جزاكم الله خيرا

Unknown يقول...

السلام عليكم ورحمة الله
اخي الفاضل اعجبني كثيرا شرحك المتميز واود ان اسألك سؤال يخص مشروع التخرج
هل يمكن ان استخدم الفجول بيسك مع الماتلاب .يعني اعمل برنامج بالماتلاب واستدعية بواسطة الفجول بيسك.

Unknown يقول...

نعم اخي ممكن شاهد هذا الرابط
http://hussienahmmed.blogspot.com/2011/09/matlab-and-visual-stdio.html

غير معرف يقول...

اخي السلام عليكم اعجبني موضوعك وانا احتاج إلى مساعدة في مشروع تخرجي وخاصة بما يتعلق بالواجهات فارجو مساعدتي باسرع وقت ممكن مع خالص احترامي وتقديري....

Unknown يقول...

السلام عليكم بش مهندس ما شاء الله الموضوع قيم ولفت نظري وانا شغال مشروع تخرج بواسطة الماتلاب (تصنيف امراض لاشارة القلب )ولكن اريد عمل ذلك بعرض الاشارة في المراحل الثلاث للمشروع بحيث تقوم الواجهه باتاحة ادخال البيانات للمستخدم وربط البيانات بالمراحل. واكون شاكر لك وجزاك الله خير

Unknown يقول...

السلام عليكم بش مهندس ما شاء الله الموضوع قيم ولفت نظري وانا شغال مشروع تخرج بواسطة الماتلاب (تصنيف امراض لاشارة القلب )ولكن اريد عمل ذلك بعرض الاشارة في المراحل الثلاث للمشروع بحيث تقوم الواجهه باتاحة ادخال البيانات للمستخدم وربط البيانات بالمراحل. واكون شاكر لك وجزاك الله خير

Unknown يقول...

السلام عليكم
الحقيقة ابدعت كثيرا في طريقة شرح و وتقديم هذا الموضوع
لدي سؤال هل يمكنك افادتي بكود الخاص ببرنامج وضع كلمة مرور + اسم المستخدم
شكرا