close

由於課業需要,最近需要用Matlab來寫個簡單的UI,以下是這次的記錄

 

1. New / APP / GUIDE

 

2. 點選GUIDE之後會跳出一個視窗,點選Blank GUI

 

按OK後會跳出以下的畫面

這時候就可以開始編輯了

 

3. 新增可輸入的文字方塊

拉至適當的位置,如下圖

 

對文字視窗快點兩下會跳出屬性視窗

String那格代表的是畫面一開起會顯示在文字輸入框裡的文字

 

 

4. 加入按鈕

在同樣的String欄位可以改變button上的文字

 

5. 加入靜態文字

 

6. 點上方的綠色開始鈕即可預覽畫面

 

7.為按鈕撰寫callback function

這時候的按鈕按下去都不會有任何動作產生,要為它寫callback function按鈕才會知道它在被按下時該執行什麼動作

我想做的是讓使用者輸入一個1~10000的數字,在使用者按下OK得按鈕後,讀取使用者輸入的數字並做後續的動作

先在按鈕上快點兩下開起屬性的視窗

點選Callback欄位旁的按鈕

會跳出該按鈕callback function的對應程式碼片段

 

以以下程式碼做範例來解釋

% --- Executes on button press in pushbutton2.
function pushbutton2_Callback(hObject, eventdata, handles)
% hObject    handle to pushbutton2 (see GCBO)
% eventdata  reserved - to be defined in a future version of MATLAB
% handles    structure with handles and user data (see GUIDATA)
index = str2num(get(handles.edit1, 'String'));
fprintf('%d\n', index);

get(handles.edit1, 'String') 的意思是要取得edit1這個物件裡的String這個property

edit1是我們剛剛創建的那個文字方塊的tag

可以對文字方塊快點兩下從屬性視窗中看到

接著將取出的字串用str2num這個function改為int再print出來

 

8. 加入圖片

我想在按鈕按下後可以顯示特定圖片,因此執行以下動作:

先在視窗中拉進可以放圖片的元件

回到剛剛button的callback function

加入以下程式碼

axes(handles.axes1);
imshow(image);

image是想要顯示的圖檔(要自己先讀入)

axes(handles.axes1)代表我要把圖畫在tag為axes1的框框裡

imshow(image) 顯示圖片

結果如下

若不希望座標軸出現

則在gui_OpeningFcn中加入下列程式碼即可(有多少個axe就加幾個)

axes(handles.axes1);
axis off;
axes(handles.axes2);
axis off;
axes(handles.axes3);
axis off;

結果:

除此之外有什麼想要在視窗開起之前就先完成的動作也都可以寫在gui_OpeningFcn裡

 

[補] share variable between callback function

有時候我們會遇到好幾個callback function都需要用到同一個variable的情況

或是我想根據使用者給的index顯示好幾張圖中的其中一張 但不想要每次要顯示就要再load全部的圖一次

那就可以在gui_OpeningFcn一次先load完全部的圖

之後其他function在使用時就不必再load一次

範例如下:

在gui_OpeningFcn中加入以下的code

最後一步很重要,少了最後一行variable就無法被共享

 

之後我若需要用到以上的variable就可以直接使用

像是我可以直接在button的callback function中直接加入以下的code

image = reshape(handles.images(:,1), 28, 28);

其中handles.images就是gui_OpeningFcn中load的handles.images

 

[補] 重新開啟GUI編輯畫面

matlab關掉後重新開啟會發現無法再次開起上次GUI的編輯畫面

就算點擊.fig檔出現的也只是純圖片而無法編輯(拉新的元件等等)

要能夠繼續編輯跟創一個新的GUI的過程很像,流程如下:

1. New / APP / GUIDE

2. 跳出GUIDE Quick Start後點擊Open Existing GUI標籤

3.  選取上次的檔案後開啟

Done! 

 

參考資料: 

http://web.ntpu.edu.tw/~ccw/statmath/M_gui.pdf

https://www.mathworks.com/matlabcentral/answers/131447-how-to-show-images-in-gui-matlab

arrow
arrow
    文章標籤
    matlab gui
    全站熱搜

    慈 發表在 痞客邦 留言(1) 人氣()