MAATLAB GUI——回调函数的设置(Callbacks)
目錄
1.回調(diào)函數(shù)創(chuàng)建步驟
1)命令窗口中輸入guide,創(chuàng)建一個(gè)新的GUI界面窗口
2)從左側(cè)的組件欄選擇需要的組件進(jìn)行布局
3)選中一個(gè)組件,雙擊進(jìn)行組件的屬性設(shè)置(Tag、String)
4)設(shè)置好屬性后,對(duì)需要執(zhí)行回調(diào)函數(shù)的組件進(jìn)行回調(diào)函數(shù)的設(shè)置,右鍵單擊組件,進(jìn)入回調(diào)函數(shù)編輯
問(wèn)題提出?
2.常見(jiàn)疑問(wèn)解答hObject, eventdata, handles等
1)回調(diào)函數(shù)中的hObject, eventdata, handles是什么意思?
2)組件之間是通過(guò)什么進(jìn)行聯(lián)系(handles),又是通過(guò)什么進(jìn)行區(qū)別的(Tag)?
3)怎么調(diào)用其他組件中的數(shù)據(jù)?
4)怎么對(duì)組件設(shè)置指定的文本?
5)組件之間的數(shù)據(jù)是怎么進(jìn)行共享的?
3.相關(guān)鏈接供參考
1.回調(diào)函數(shù)創(chuàng)建步驟
?????? 這里以一個(gè)四則運(yùn)算為例進(jìn)行說(shuō)明,實(shí)現(xiàn)的功能是,在輸入數(shù)據(jù)后,按下相應(yīng)的按鈕,會(huì)進(jìn)行計(jì)算并且將結(jié)果呈現(xiàn)在相應(yīng)的組件上
1)命令窗口中輸入guide,創(chuàng)建一個(gè)新的GUI界面窗口
2)從左側(cè)的組件欄選擇需要的組件進(jìn)行布局
3)選中一個(gè)組件,雙擊進(jìn)行組件的屬性設(shè)置(Tag、String)
4)設(shè)置好屬性后,對(duì)需要執(zhí)行回調(diào)函數(shù)的組件進(jìn)行回調(diào)函數(shù)的設(shè)置,右鍵單擊組件,進(jìn)入回調(diào)函數(shù)編輯
% --- 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) set(handles.text6,'String',"+"); str1 = get(handles.edit1,'String'); % 獲得文本框的文本內(nèi)容,此時(shí)為字符串類型 num1 = str2double(str1);% 將獲得的字符串轉(zhuǎn)換成數(shù)字類型 str2 = get(handles.edit2,'String'); % 獲得文本框的文本內(nèi)容,此時(shí)為字符串類型 num2 = str2double(str2);% 將獲得的字符串轉(zhuǎn)換成數(shù)字類型 res = num1 + num2; set(handles.edit3,'String',res);問(wèn)題提出?
是不是看到這里會(huì)很多疑問(wèn),比如:
1)回調(diào)函數(shù)中的hObject, eventdata, handles是什么意思?
2)組件之間是通過(guò)什么進(jìn)行聯(lián)系,又是通過(guò)什么進(jìn)行區(qū)別的?
3)怎么調(diào)用其他組件中的數(shù)據(jù)?
4)組件之間的數(shù)據(jù)是怎么進(jìn)行共享的?
5)怎么對(duì)組件設(shè)置指定的文本?
當(dāng)時(shí)我也有疑問(wèn),在一個(gè)帖子上看到了相關(guān)的回答,自己做了一些補(bǔ)充,大家可以看一下
?
2.常見(jiàn)疑問(wèn)解答hObject, eventdata, handles等
1)回調(diào)函數(shù)中的hObject, eventdata, handles是什么意思?
答:
參考鏈接:https://blog.csdn.net/smf0504/article/details/51832374?_t_t_t=0.11396357929334044
***hObject是當(dāng)前回調(diào)函數(shù)對(duì)應(yīng)的GUI對(duì)象的句柄;
***eventdata為未定義的保留參數(shù),即當(dāng)前控件的相關(guān)變量;
***handles是當(dāng)前GUI所有數(shù)據(jù)的結(jié)構(gòu)體,包含所有GUI對(duì)象的句柄和用戶定義的數(shù)據(jù);
***varargin在初始化時(shí)是空的,在觸發(fā)控件時(shí),變成一個(gè)1X4的單元數(shù)組;
第一個(gè)varargin{1}表示觸發(fā)控件后所要執(zhí)行的回調(diào)函數(shù)的函數(shù)名。
如果想把一個(gè)局部變量變成全局變量,一個(gè)有效的方法是將變量存在handles中,獲取handles結(jié)構(gòu)體某個(gè)變量值的方法是x=handles.a。
2)組件之間是通過(guò)什么進(jìn)行聯(lián)系(handles),又是通過(guò)什么進(jìn)行區(qū)別的(Tag)?
答:
聯(lián)系——在同一個(gè)GUI內(nèi)的所有數(shù)據(jù)都有一個(gè)共同的結(jié)構(gòu)體,即handles,這個(gè)結(jié)構(gòu)體在創(chuàng)建了gui保存后會(huì)自動(dòng)進(jìn)行創(chuàng)建,含有所有組件對(duì)象的句柄以及相應(yīng)的數(shù)據(jù),而組件也是通過(guò)這個(gè)聯(lián)系在一起的,使得所有在同一個(gè)gui的組件具有共同的結(jié)構(gòu)體,不會(huì)和其他的gui的組件混淆在一起;
區(qū)別——在同一個(gè)handles下的每一個(gè)組件都有自己的屬性,而在屬性中有一個(gè)屬性是標(biāo)簽名Tag,這是每一個(gè)組件獨(dú)一無(wú)二的名字,因此組件之間是通過(guò)標(biāo)簽來(lái)進(jìn)行區(qū)分彼此的;
作用——handles.標(biāo)簽名,可以用于對(duì)指定標(biāo)簽的屬性進(jìn)行設(shè)置。
3)怎么調(diào)用其他組件中的數(shù)據(jù)?
答:
通過(guò)以下代碼進(jìn)行組件文本的提取,提取到的是一個(gè)字符串類型
get(handles.組件的標(biāo)簽名,"要設(shè)置的組件的屬性")示例: str1 = get(handles.edit1,'String')%返回字符串類型如果文本是數(shù)字組成的字符串,要想獲得數(shù)據(jù)類型,則需要使用到str2double()函數(shù)
num1 = str2double(str1)%得到一個(gè)雙精度浮點(diǎn)數(shù)4)怎么對(duì)組件設(shè)置指定的文本?
答:
通過(guò)以下代碼進(jìn)行組件文本的設(shè)置
set(handles.組件的標(biāo)簽名,"要設(shè)置的組件的屬性名","要設(shè)置的內(nèi)容")示例: set(handles.text6,'String',"+")5)組件之間的數(shù)據(jù)是怎么進(jìn)行共享的?
答:
同一個(gè)gui中組件的屬性和數(shù)據(jù)都會(huì)保存在handles結(jié)構(gòu)體中,在回調(diào)函數(shù)下,對(duì)相應(yīng)組件的文本進(jìn)行提取,即可對(duì)其進(jìn)行操作,
如本例中,按下加號(hào)按鈕,對(duì)兩個(gè)數(shù)進(jìn)行加法計(jì)算,加法計(jì)算前,得先獲取編輯文本中的文本內(nèi)容,在按下按鈕后進(jìn)行加法操作
3.相關(guān)鏈接供參考
https://blog.csdn.net/smf0504/article/details/51832374?_t_t_t=0.11396357929334044
https://jingyan.baidu.com/article/363872ec0c7ae96e4ba16f00.html
https://blog.csdn.net/persistlzy/article/details/53309467
https://wenku.baidu.com/view/5fefde1076eeaeaad1f330d0.html
總結(jié)
以上是生活随笔為你收集整理的MAATLAB GUI——回调函数的设置(Callbacks)的全部?jī)?nèi)容,希望文章能夠幫你解決所遇到的問(wèn)題。
- 上一篇: [UE4]单机游戏改网络游戏,不完全清单
- 下一篇: Kafka配置JAAS