一、搭建最基本的GUI
本節通過兩個例子進行論述,分別介紹GUI基本操作,即數值運算、數據導入、圖形繪制等功能的GUI實現。
A-加法器
首先上效果圖:
輸入兩個數值,點擊Add!,便可顯示結果,下面開始逐步介紹。
- GUI新建
常用的新建GUI方法有兩個:
-
- Command Window輸入guide—>Create New GUI;
- Home—>New—>Graphical User Interface;
注意:勾選“Sace new figure as:”,可選擇存儲路徑,並對文件命名。
這里我們選擇默認的“Blank GUI(Default)”,點擊“OK”,便可進入, 本文主要用到以下幾個選框:
- GUI框架搭建
本文為基礎內容,框架內修改的主要是
點擊需要添加的選框至面板中,雙擊選框,特性中:
其中
String:顯示的名稱;
Tag:標簽,主要用於程序編寫時,對變量進行定位;
常用:
position:指示空間在figure中的位置
font**:字體相關屬性
string:相當如VB中的caption,就是顯示在控件上的文字
tag:控件的唯一標識符,相當於ID,我們需要tag來指定某一個空間
因此,我們只需要設定參與操作的選框tag;對於不涉及操作、僅僅作為顯示的選框,其tag我們可以默認。
分析加法器,我們總共需要的選框:
其中,涉及操作的有:
兩個輸入(兩個編輯文本框) + 一個執行加法運算的開關(一個確定按鈕)+結果顯示(一個靜態文本框)。
設置完成的效果圖:
點擊“保存”,此時便出現.m和.fig兩個文件,加法器的GUI框架搭建完畢。
- GUI對應代碼完善
步驟一:設定tag、String等參數;
首先是回調函數的定位(如果已經退出GUI編輯框,可Command Window輸入guilde進入):
選中並右鍵—>Viwe Callbacks—>Callback,即可打開對應的函數模塊。
對應提取數據的代碼(提出為字符,需要進行str2num的轉換)
1
|
a =
get
(handles.input_a,
'String'
);
%String的S大寫
|
假設兩個輸入框的String分別設為0(無輸入默認顯示0),tag分別設定為:
-
- input1_editText,input2_editText
OK按鈕重命名:String設置為:Add! 對應tag為:
-
- add_pushbutton
結果的String設為0,對應tag設為:
-
- answer_staticText
步驟二:讀取輸入參數
打開第一個輸入框,函數模塊初始為
1
2
3
4
5
6
7
8
|
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
|
編輯回調函數,修改為:
1
2
3
4
5
6
7
8
9
10
11
12
|
% handles 包含figure中所有圖形對象句柄的結構體,如果我們想引用tag為mytag的控件,使用handles.mytag
% set/get 函數是用來設置/獲取某個控件屬性
% 使用get命令獲取第一個加數,並將它轉換成數值
input
=
str2num
(
get
(hObject,
'String'
));
% string屬性是字符串,所以必須轉換成數值
% 檢驗輸入是否為空,是則將它置為0
if
(
isempty
(
input
))
set
(hObject,
'String'
,
'0'
)
end
% 保存handles結構體,只要在handles結構體有改變時,才需要保存
guidata
(hObject, handles);
% 這里由於handles沒有改變,故這里其實沒有必要,建議在所有Callback最后都添加該命令,此處為將參數設定為GUI變量,可全局調用。
|
第二個輸入框同第一個輸入框的操作相同;
步驟三:輸出結果的顯示
關聯控制鍵,並將結果賦給對應的tag,初始的回調函數:
1
2
3
4
5
|
% --- Executes on button press in add_pushbutton.
function
add_pushbutton_Callback(hObject, eventdata, handles)
% hObject handle to add_pushbutton (see GCBO)
% eventdata reserved - to be defined in a future version of MATLAB
% handles structure with handles and user data (see GUIDATA)
|
修改后:
1
2
3
4
5
6
7
8
9
10
|
a =
get
(handles.input1_editText,
'String'
);
b =
get
(handles.input2_editText,
'String'
);
% a和b是字符串變量,我們需要使用str2double函數將其轉換為數值
% 然后才能相加,否則字符串是沒法相加的
total =
str2num
(a) +
str2num
(b);
% 格式轉換,轉換為數值
% 由於string屬性是字符串,所以必須將兩個數的和轉換為字符串
c =
num2str
(total);
% 轉換為字符串
% 將結果賦值給answer_staticText空間的string屬性,於是就可以顯示結果了
set
(handles.answer_staticText,
'String'
,c);
guidata
(hObject, handles);
% 更新結構體
|
至此,完成了GUI代碼的完善。
- GUI運行
GUI的運行主要分為三種方式。
方式一:Current Directory運行.m文件
同普通程序運行一致,運行結束即彈出GUI畫框,按要求操作即可。
方式二:GUI界面run
Command Window輸入guide,進入GUI編輯界面,點擊右上角的,即彈出GUI界面。
方式三:Command Window運行GUI文件名
例如有GUI程序:example.fig,切換到該文件的目錄下,在Command Window輸入example,回車運行,即彈出GUI界面。
作者:黃傑。
時間:2020-012-14 18:43:35