30/09/2018
Mục đích: Tạo một chương trình thân thiện với người dùng , giúp thể hiện trực quan các kết quả cần thiết và tránh phải gõ các câu lệnh dài,phức tạp.

Mục đích: Tạo một chương trình thân thiện với người dùng , giúp thể hiện trực quan các kết quả cần thiết và tránh phải gõ các câu lệnh dài,phức tạp.

 Khởi tạo GUIDE

1.Mở Matlab, đi đến cửa sổ dòng lệnh và gõ lênh: guide

 2.Chọn Blạnk GUI

3. Một màn hình như sau sẽ xuất hiện:

4. Chúng ta sẽ add các thành phần bên phía tay trái để được 1 giao diện như sau:

 [Image]

Tạo giao diện

Các bạn kéo thả các thành phần sau:

 -2 edit Text component [Image]  

-3 Static Text component [Image] 

-1 Component Pushbutton [Image] 

Nhấp đúp vào mỗi component để thiết lập tên và các thuộc tính khác.Chúng ta quan tâm đến 2 thuộc tính cơ bản: String(Nhãn của component),Tag(tên của component)

Component Static Text

[Image]

  Component Edit Text

[Image]

Tương tự với component Edit Text thứ 2 

Component pushbutton

[Image]

Sau đó save file giao diện lại ,lúc này Matlab sẽ tạo ra cho bạn 1 file .m tương ứng để xử lý các sự kiện do user tác động đến mỗi component.

Viết code cho các hàm Callback của GUI

Như đã nói ở trên, sau khi tạo xong và save file giao diện lại, Matlab sẽ sinh ra một file .m tương ứng để xử lý các sự kiện trên mỗi component. Các hàm xử lý sự kiện này ta gọi là callback function.

1.      Mở file .m tương ứng của chương trinh trong Matlab Editor, nhấn vào biểu tượng [Image], sẽ cho ra 1 danh sách các hàm callback. Chúng ta tìm đến dòng input1_editText_Callback

 [Image]

2.      Con trỏ sẽ đưa bạn đến hàm tương ứng 

function input1_editText_Callback(hObject, eventdata, handles)

% hObject    handle to input1_editText (see GCBO)

% eventdata  reserved - to be defined in a future version of MATLAB

% handles    structure with handles and user data (see GUIDATA) 

% Hint: get(hObject,'String') returns contents of input1_editText as text

%        str2double(get(hObject,'String')) returns contents of

%        input1_editText as a double 

Thêm đoạn code sau vào dưới cùng của hàm

%store the contents of input1_editText as a string. if the string

%is not a number then input will be empty

input = str2num(get(hObject,'String'));

 

%checks to see if input is empty. if so, default input1_editText to zero

if (isempty(input))

     set(hObject,'String','0')

end

guidata(hObject, handles);

hObject ở đây thực chất là đối tượng edit, câu lệnh thứ nhất sẽ lấy giá trị string của đối tượng input1_editText và chuyển nó sang dạng số. Câu lệnh if để kiểm tra xem giá trị của input có phù hợp không,nghĩa là có phải là số không, nêu không phải sẽ gán cho nó giá trị mặc định là 0. Câu lệnh cuối cùng để update lại đối tuợng hObject sau  mỗi lần gọi hàm Callback.

Chúng ta làm tương tự với input2_editText_callback

3.      Tiếp đến chúng ta tìm đến hàm add_pushbutton_Callback và xử lý

 Thêm đoạn code sau vào :

a = get(handles.input1_editText,'String');

b = get(handles.input2_editText,'String');

% a and b are variables of Strings type, and need to be converted

% to variables of Number type before they can be added together 

total = str2num(a) + str2num(b);

c = num2str(total);

% need to convert the answer back into String type to display it

set(handles.answer_staticText,'String',c);

guidata(hObject, handles);

Giải thích 1 chút về đoạn code:

2 câu lệnh đầu tiên lấy các giá trị ở 2 editText.Handles là 1 đối tượng của cửa sổ chính, nó chứa tất cả các component con khác nằm trong cửa sổ này. Vì vậy, khi muốn lấy ID của đối tượng input_editText ta phải tham chiếu đến chúng thông qua đối tượng handle.

Các giá trị lấy được cần phải chuyển sang dạng số bằng câu lệnh str2num. Sau đó để in kết quả ra Static Text, ta dùng lênh set. Cuối cùng là update lại giao diện bằng câu lệnh guidata.

KHởi động GUI

 Có 2 cách để chạy chương trình:

1.      Cách thứ nhất, nhấn nút [Image] trong GUIDE editor.

 [Image]

2.      Cách thứ 2:

 Thiết lập Matlab current directory về đúng đường dẫn có chứa các file nguồn của chương trình. Sau đó gõ lệnh: myAdder

(trong trường hợp các file của chưong trình là myAdder.fig và myAdder.m)

3.      Chương trình sẽ làm việc bình thường nếu tất cả các bước trên được hoàn tất

 [Image]