في هذا
القسم ...
|
"إضافة
التعليمات البرمجية code للواجهة "
"توليد البيانات للرسم plot"
"برمجة القائمة المنسدلة pop-up menu"
"برمجة أزرار الضغط push buttons"
"فتح وتشغيل الواجهة الرسومية GUI "
|
في
الجزء السابق من هذا التمرين،قمنا بتصميم الواجهة الرسومية بإستخدام الأداة guide ،وإضافة
المكونات اللازمة للواجهة ،والآن سننتقل إلى الجزء البرمجي ..
إضافة التعليمات البرمجية إلى
الواجهة الرسومية البسيطة التي قمنا بإنشائها بإستخدام GUIDE:
عندما
قمت بحفظ واجهتك
الرسومية GUI في الخطوة
السابقة،GUIDE قام بتوليد ملفين :
FIG-file: simple_gui.fig والذي يحوي مخطط (تصميم) الواجهة الرسومية.
والملف simple_gui.m الذي يحوي التعليمات البرمجية code التي تضبط سلوك الواجهة الرسومية.
FIG-file: simple_gui.fig والذي يحوي مخطط (تصميم) الواجهة الرسومية.
والملف simple_gui.m الذي يحوي التعليمات البرمجية code التي تضبط سلوك الواجهة الرسومية.
هذا الكود code الذي تم توليده تلقائياً يتضمن مجموعة من التوابع MATLAB functions (هذه
التوابع ليس المقصود بهاأنهاهي الـscript )،لكن الواجهة الرسومية لاتستجيب لأن هذه التوابع لاتحوي بعد
العبارات البرمجية التي ستؤدي إلى فعل ما،وهذا ماسنقوم به الآن وهو برمجة الواجهة
الرسومية.
توليد البيانات
للرسم plot :
نريد الآن أن نعرف كيف سنقوم بتوليد البيانات للرسم
عندما يضغطالمستخدم على زر الضغط.
1- بداية
إنظر إلى تابع الإفتتاح opening function في
المحرر editor ،إذا كان
الملف البرمجي للواجهة لم يفتح بعد في المحرر،إفتحه وذلك بإختيار Editor من القائمة GUIDE View، في المحرر editor إنقر على الايقونة Go To الموجودة في لوحة الأدوات،ثم قم بإختيار تابع
الإفتتاح simple_gui_OpeningFcn من القائمة المنسدلة .
المؤشر سينتقل ليشير إلى تابع الإفتتاح،الذي يحوي هذا
الكود:
% --- Executes just before simple_gui is made visible.
function simple_gui_OpeningFcn(hObject,
eventdata, handles, varargin)
%
This function has no output args, see OutputFcn.
%
hObject handle to figure
%
eventdata reserved - to be defined in a
future version of MATLAB
%
handles structure with handles and
user data (see GUIDATA)
%
varargin command line arguments to
simple_gui (see VARARGIN)
%
Choose default command line output for simple_gui
handles.output
= hObject;
%
Update handles structure
guidata(hObject,
handles);
%
UIWAIT makes simple_gui wait for user response (see UIRESUME)
%
uiwait(handles.figure1);
2- لتوليد بيانات الواجهة الرسومية للرسم،أضف الكود التالي
مباشرة بعد هذا التعليق
% varargin command line
arguments to simple_gui (see VARARGIN)
الموجود في تابع الإفتتاح :
% varargin command line
arguments to simple_gui (see VARARGIN)
%Creat
the data to plot
handles.peaks=peaks(35);
handles.membrane=membrane;
[x,y]=meshgrid(-8:.5:8);
r=sqrt(x.^2+y.^2)+eps;
sinc=sin(r)./r;
handles.sinc=sinc;
%Set
the current data value.
handles.current_data=handles.peaks;
surf(handles.current_data)
الأسطر التنفيذية الستة الأولى تقوم بتوليد البيانات
بإستخدام توابع الماتلاب وهي : peaks,membrane and sinc .
هذه البيانات يتم تخزينها في بنية الـ handles ،الوسيط يزوّد لكل الإستدعاءات. إستدعاءات
من زر الضغط تستطيع إستعادة البيانات من هذه البنية handles structure .
اما آخر سطرين من الكود السابق فهي لتوليد البيانات
الحالية وجمعها peaks، ثم عرض
السطح الذي يمثل رسم peaks .
الشكل التالي يبين النافذة التي ستظهر عند تنفيذ الكود
السابق.
برمجة القائمة المنسدلة pop-up menu :
القائمة المنسدلة تتيح للمستخدم أن يختار البيانات التي
يود رسمها، عندما يقوم المستخدم بإختيار واحدة من الخيارات الثلاث للرسم،برنامج
الماتلاب سيضع القيمة التي إخترتها في خاصية القيمة Value property (النص الذي
يبدو لك قبل أن تضغط على القائمة).
عند إستدعاء القائمة المنسدلة،هذا الإستدعاء سيقرأ قيمة Value property ليحدد
العنصر الذي تعرضه القائمة حالياً،ويضبط handles.current_data وفقاً لذلك.
1-
قم بإستدعاء القائمة المنسدلة pop-up menu من المحرر editor
،وذلك بالنقر بزر الفأرة الأيمن على عنصر القائمة الموجود في محرر التخطيط GUIDE،ثم إختر View Callbacks من القائمة
المنسدلة،ثم إختر Callback.
إذا كان المحرر editor لم يُفتَح بعد،guide سيفتحه لترى الملف البرمجي لواجهتك code file ،والمؤشر سيتحرك ليشير إلى إستدعاء pop- menu callback ،الذي يحوي الكود التالي:
% --- Executes on selection change in popupmenu1.
function popupmenu1_Callback(hObject,
eventdata, handles)
%
hObject handle to popupmenu1 (see
GCBO)
%
eventdata reserved - to be defined in a
future version of MATLAB
%
handles structure with handles and
user data (see GUIDATA)
2-
قم بإضافة الكود التالي إلى popupmenu1_Callback بعد التعليق
الذي يبدأ بـ %handles……
هذا الكود سيعيد خاصيتين للقائمة المنسدلة pop-up menu وهي :
- String : مصفوفة cell array تتضمن محتويات القائمة.
- Value : قيمة تشير إلى البيانات التي تم إختيارها من محتويات القائمة.
هذا الكود سيعيد خاصيتين للقائمة المنسدلة pop-up menu وهي :
- String : مصفوفة cell array تتضمن محتويات القائمة.
- Value : قيمة تشير إلى البيانات التي تم إختيارها من محتويات القائمة.
ثم
إستخدمنا عبارة switch لنجعل
البيانات الحالية هي البيانات التي تم إختيارها،العبارة البرمجية الأخيرة تحفظ
التغييرات في handles
structure .
%Determine the selected data set.
str =
get(hObject,'String');
val =
get(hObject,'Value');
%Set
current data to the selecteddata set.
case 'Peaks' %User selects peaks.
handles.current_data=handles.peaks;
case 'Membrane' %User selects membrane.
handles.current_data=handles.membrane;
case 'Sinc' %User selects sinc.
handles.current_data=handles.sinc;
end
%Save
the handles structure.
guidata(hObject,handles)
برمجة
أزرار الضغط Push Buttons :
كل زر من
أزرار الضغط يقوم بإنشاء نوع مختلف من الرسوميات plot بإستخدام البيانات التي يتم إختيارها من
القائمة المنسدلة.
إن
إستدعاء زر الضغط سيأخذ البيانات من بنية handles structure ثم يرسمها .
1-
قم بإستدعاء زر الضغط Surf في محرر الماتلاب،بنفس الطريقة
السابقة،بالضغط على الزر الأيمن ثم من القائمة المنسدلة قم بإختيار
View Callbacks > Callback.
View Callbacks > Callback.
سينتقل
المؤشر إلى تابع إستدعاء زر الضغط Surf في ملف التعليمات البرمجية للواجهة ،والذي يحوي الكود التالي:
% --- Executes on button press in pushbutton1.
function pushbutton1_Callback(hObject,
eventdata, handles)
%
hObject handle to pushbutton1 (see
GCBO)
%
eventdata reserved - to be defined in a
future version of MATLAB
%
handles structure with handles and
user data (see GUIDATA)
2-
قم بإضافة الكود التالي بعد
التعليق %handles….
%Display
surf plot of the currently selected data.
surf(handles.current_data);
3- أعد الخطوات السابقة،لإستدعاء
تابع الزر Mesh،وقم بإضافة الكود التالي:
%Display
Mesh plot of the currently selected data.
mesh(handles.current_data);
4- وايضاً أضف الكود التالي إلى
تابع إستدعاء زر الضغط Contour :
%Display
Contour plot of the currently selected data.
contour(handles.current_data);
واجهتك الرسومية Simple GUI أصبحت جاهزة
الآن لتشغيلها :) .
فتح وتشغيل الواجهة الرسومية GUI :
قم بتشغيل واجهتك الرسومية بإختيار Run من القائمة Tools ،أو بكتابة simple_gui .
قم بتجريب واجهتك ،وذلك بتغيير نوع البيانات من القائمة
المنسدلة، ثم رسمها بثلاثة أنواع من
الرسوميات وذلك بالضغط على ازرار الضغط التي تغير نوع الرسم.