MATLAB 程式設計/圖形使用者介面
注意:在 MATLAB R2019b 版本中,MathWorks 宣佈將在未來版本中移除用於在 MATLAB 中構建應用程式的 GUIDE 設計環境。請注意,在移除 GUIDE 後,GUIDE 應用程式將繼續執行,但將無法使用 GUIDE 環境進行編輯。
MATLAB 提供的 GUIDE 工具箱(以其全稱圖形使用者介面開發環境而聞名)允許高階 MATLAB 程式設計師為其程式提供圖形使用者介面。GUI 很有用,因為它們使終端使用者擺脫了 MATLAB 的命令列介面,並提供了一種在非程式設計師之間輕鬆共享程式碼的方法。
在 MATLAB 中使用 GUIDE 主要有兩種工作流程,即
(i) 佈局 GUI
(ii) 編寫 GUI 程式
要開始在 GUIDE 中程式設計,只需在 MATLAB 中輸入以下內容:
guide
它將顯示以下圖表

我們將建立一個使用 GUIDE 工具箱建立的簡單 GUI 示例,它接收兩個數字的輸入並將它們相加,並在第三個文字框中顯示結果。它非常簡單,但有助於說明這樣的 GUI 在幾分鐘內就創建出來了。
選擇空白 GUI(預設)


我們可以看到,在此主選單的介面中存在網格狀結構。此外,我們還可以看到 GUIDE 使用的基本工具在此處顯示。在繼續之前,以下是工具欄及其功能的簡要說明。
| 元件 | 描述 |
|---|---|
| 按鈕 | 當用戶單擊滑鼠時啟用的按鈕。 |
| 滑塊 | 調整滑塊的位置將更改值 |
| 單選按鈕 | 可以將其狀態從未選中(未啟用)更改為選中(啟用)並返回的按鈕。 |
| 複選框 | 可以將狀態從選中(已選中)更改為未選中(未選中)的複選按鈕。 |
| 編輯文字 | 允許使用者透過在其中鍵入文字輸入資訊的文字欄位。 |
| 靜態文字 | 顯示一些文字的標籤;用於標記專案或報告計算結果 |
| 彈出選單 | 提供使用者一個選項列表的選單,從中可以選擇一個選項 |
| 列表框 | 顯示可以滾動的選項列表的列表。請注意,可以同時選擇多個專案 |
| 切換按鈕 | 按下後,保持按下狀態,直到再次按下 |
| 表格 | 以表格形式顯示資料的表格 |
| 座標軸 | 顯示二維和三維繪圖圖表的區域 |
| 面板 | 在視覺上將控制元件組合在一起。 |
| 按鈕組 | 將一組單選按鈕或切換按鈕組合在一起,以便它們一起工作,結果一次只能選擇一個 |
| Active X 控制元件 | 不適用 |


我們可以將靜態文字、編輯文字和按鈕拖放到左圖所示的區域中。
如您所見,按鈕和編輯文字在欄位上顯示通用“編輯文字”字樣和“按鈕”字樣。
我們可以更改這些文字,如下所示:首先,雙擊任何編輯文字,它應該彈出名為檢查器的視窗,該視窗顯示在右側圖片中。
向下滾動直到找到字串屬性,然後刪除其中的文字,右側的編輯文字現在應該為空。
對於按鈕,重複相同的步驟:雙擊按鈕,然後向下滾動直到字串屬性,並將字樣更改為新增
我們已經完成了 GUI 的基本佈局。
我們只需要邏輯地思考我們要做什麼
1. 從其值屬性獲取Num_A文字欄位的新值。Num_B也是如此
2. 將兩個數字相加
3. 設定標籤totalAdd的字串屬性的值
為此,我們需要了解get和set命令
get命令獲取元件標籤名稱的當前字串屬性。
var = get(handles.Tag Name , values)
set命令使用更新的值替換元件的字串屬性。
var = set(handles.Tag Name , values)
回撥函式是在使用者透過單擊按鈕、按下鍵盤上的鍵或選擇選單項來啟動操作時執行的函式。因此,編寫回調函式是編寫 GUI 的最重要部分。例如,在上面說明的 GUI 中,我們需要為按鈕新增編寫回調函式。這在程式碼中作為回撥函式提供。當您將元件新增到 GUI 佈局時,GUIDE 會為其 Tag 屬性分配一個值,然後使用該值生成回撥函式的名稱。
以下提供了程式碼,並說明了如何編寫簡單的回撥函式
% --- 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)
n1 = get(handles.edit1,'string'); % get the values from the edit text 1
n2 = get(handles.edit2,'string'); % get the values from the edit text 2
S = str2double(n1) + str2double(n2); % performing addition
set(handles.edit3,'string',num2str(S)) % set the number of addition result to edit text 3
在這段程式碼中,我從編輯框中獲取數字作為字串,然後使用 MATLAB 提供的 str2double 函式將其轉換為數字。
然後,我將另一個編輯框的字串設定為這兩個數字的總和。這完成了需要新增兩個數字的簡單 GUI 示例。


為了使計算器比簡單的加法更復雜,我們可以建立一個更完整的計算器,它可以處理減法、乘法和除法。為此,請新增 3 個按鈕。雙擊每個按鈕以將字串更改為相關的函式,例如 SUB 用於減法函式,依此類推。
同時,將標籤更改為更易識別的標籤名稱,例如sub_button。在使用回撥函式進行程式設計後,它將更易於識別和編輯。
您可以新增靜態名稱來標記編輯文字,但對於此練習,這是可選的。
如您所見,GUI 雜亂無章,但有一個工具可以用來整理混亂。
您可以使用對齊物件工具(右側圖片所示)按正確的順序對齊按鈕。
將兩個編輯文字水平對齊,然後將 4 個按鈕水平對齊。
對齊正確後,它將如下面的圖片所示。您可以將其與上面的圖片進行比較,該圖片在之前看起來很凌亂。
我們可以繼續執行下一步進行程式設計,這看起來更容易,因為我們已經為新增按鈕完成了它

要對每個單獨的按鈕進行程式設計,請右鍵單擊每個按鈕並選擇編輯器,然後在其中鍵入程式碼。
如您所見,描述每個按鈕的標籤而不是通用名稱按鈕 1等非常有用……
% --- Executes on button press in sub_button.
function sub_button_Callback(hObject, eventdata, handles)
% hObject handle to sub_button (see GCBO)
% eventdata reserved - to be defined in a future version of MATLAB
% handles structure with handles and user data (see GUIDATA)
n1 = get(handles.edit1,'string');
n2 = get(handles.edit2,'string');
S = str2double(n1) - str2double(n2);
set(handles.edit3,'String',num2str(S))
% --- Executes on button press in mul_button.
function mul_button_Callback(hObject, eventdata, handles)
% hObject handle to mul_button (see GCBO)
% eventdata reserved - to be defined in a future version of MATLAB
% handles structure with handles and user data (see GUIDATA)
n1 = get(handles.edit1,'string');
n2 = get(handles.edit2,'string');
S = str2double(n1) * str2double(n2);
set(handles.edit3,'String',num2str(S))
% --- Executes on button press in div_button.
function div_button_Callback(hObject, eventdata, handles)
% hObject handle to div_button (see GCBO)
% eventdata reserved - to be defined in a future version of MATLAB
% handles structure with handles and user data (see GUIDATA)
n1 = get(handles.edit1,'string');
n2 = get(handles.edit2,'string');
S = str2double(n1) / str2double(n2);
set(handles.edit3,'String',num2str(S))
您完成了,您已在 MATLAB 中建立了一個簡單的可工作計算器。
為了說明更復雜的示例,我們將展示如何繪製簡單的拋射體運動,並且您可以更改函式的引數。只要稍加想象,您就可以使其繪製您輸入的任何任意函式。
https://web.archive.org/web/20221003005946/https://www.mathworks.com/help/matlab/ref/guide.html
待辦事項