跳轉至內容

MATLAB 程式設計/圖形使用者介面

來自 Wikibooks,開放世界中的開放書籍

注意:在 MATLAB R2019b 版本中,MathWorks 宣佈將在未來版本中移除用於在 MATLAB 中構建應用程式的 GUIDE 設計環境。請注意,在移除 GUIDE 後,GUIDE 應用程式將繼續執行,但將無法使用 GUIDE 環境進行編輯。

什麼是 GUIDE?

[編輯 | 編輯原始碼]

MATLAB 提供的 GUIDE 工具箱(以其全稱圖形使用者介面開發環境而聞名)允許高階 MATLAB 程式設計師為其程式提供圖形使用者介面。GUI 很有用,因為它們使終端使用者擺脫了 MATLAB 的命令列介面,並提供了一種在非程式設計師之間輕鬆共享程式碼的方法。

在 MATLAB 中使用 GUIDE 主要有兩種工作流程,即

(i) 佈局 GUI
(ii) 編寫 GUI 程式

從空白 GUI 建立

[編輯 | 編輯原始碼]

要開始在 GUIDE 中程式設計,只需在 MATLAB 中輸入以下內容:

guide

它將顯示以下圖表

MATLAB GUIDE GUI Main Menu
MATLAB GUIDE GUI 主選單

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


選擇空白 GUI(預設)



放置元件並更改屬性

[編輯 | 編輯原始碼]
Showcasing the MATLAB GUIDE Blank Canvas GUI
展示 MATLAB GUIDE 空白畫布 GUI

我們可以看到,在此主選單的介面中存在網格狀結構。此外,我們還可以看到 GUIDE 使用的基本工具在此處顯示。在繼續之前,以下是工具欄及其功能的簡要說明。

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

我們可以將靜態文字編輯文字按鈕拖放到左圖所示的區域中。

如您所見,按鈕編輯文字在欄位上顯示通用“編輯文字”字樣和“按鈕”字樣。
我們可以更改這些文字,如下所示:首先,雙擊任何編輯文字,它應該彈出名為檢查器的視窗,該視窗顯示在右側圖片中。
向下滾動直到找到字串屬性,然後刪除其中的文字,右側的編輯文字現在應該為空。

對於按鈕,重複相同的步驟:雙擊按鈕,然後向下滾動直到字串屬性,並將字樣更改為新增

使用控制代碼進行程式設計

[編輯 | 編輯原始碼]

我們已經完成了 GUI 的基本佈局。

我們只需要邏輯地思考我們要做什麼

1. 從其屬性獲取Num_A文字欄位的新值。Num_B也是如此
2. 將兩個數字相加
3. 設定標籤totalAdd的字串屬性的值

為此,我們需要了解getset命令

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 示例。

更復雜的 GUI

[編輯 | 編輯原始碼]
MATLAB GUI Align Objects GUI
MATLAB GUI 對齊物件 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

https://web.archive.org/web/20211021213906/https://www.matlabclass.com/2013/11/study-of-graphical-user-interface-in.html

待辦事項

華夏公益教科書