matlab table中的文字转string_MATLAB_GUI_教程(2)pushbutton
目錄
前言上期教程按鈕介紹按鈕(pushbutton)如何在窗口中創建一個按鈕常用屬性常用屬性練習回調函數的編寫規則設置回調函數:定義(編寫)回調函數:NoteGUI中各個回調函數之間數據的傳遞setappdatagetappdata方法按鈕的回調函數
前言
上期教程
按鈕介紹
這個按鈕是GUI界面中用的最多的一個控件了,上期教程中的GUI界面中的元素一圖中列出了10個UI控件,按鈕(pushbutton)就是其中的第一個。這些UI控件的基本屬性都一樣,所以本期講完了按鈕的常用的屬性后,后面那些按鈕的屬性就不詳細展開講了。
這個按鈕和開關不一樣,對于按鈕你點一下后就會彈回原來的狀態。如果是開關的話,你按一下,他會一直保持你按下之后的狀態,直到你再次按下開關后才會變回原來的狀態,這個開關對應的UI控件是togglebutton(切換按鈕)。
按鈕(pushbutton)
如何在窗口中創建一個按鈕
function?main()close?all
%%?創建主窗口,?打三個點可以換行書寫,一行寫多了不太好
h_fig?=?figure('Name',?'MATLAB_GUI_教程(2)pushbutton',?...
????'MenuBar',?'none',?...
????'ToolBar',?'none');
%%?創建一個按鈕
btn?=?uicontrol('Style',?'pushbutton',?'Parent',?h_fig);
end
如你所見,這里是用uicontrol函數來創建按鈕的。uicontrol函數就是用來創建UI控件的,該函數返回創建出來的控件的句柄。
UI控件的Style屬性是用來控制UI控件的類型
UI控件的Parent屬性是用來控制該控件放在哪里(此處是直接放在主窗口中)
還記得上篇教程中說的用下面這種方式來設置控件的屬性么:
btn?=?uicontrol('屬性1',?'值1',?'屬性2',?'值2',?'屬性3',?'值3');我們在創建UI控件時比較習慣用這種方式來創建,當然你也可以像下面這樣來創建,不過我看著比較別扭:
%%?創建一個按鈕btn?=?uicontrol;
btn.Parent?=?h_fig;
btn.Style?=?'pushbutton';
上面那個創建的結果如下:
圖1常用屬性
這里常用屬性這里不包括按鈕的那些回調函數,回調函數那些單獨說。
上面已經認識了按鈕的兩個屬性了,其實我覺得不應該說是按鈕的屬性,應該說是UI控件的屬性,因為這個按鈕只是當UI控件的Style屬性為'pushbutton'時的情況。
和figure一樣,按鈕也有很多屬性,我們不可能把他們都記住,頂多記幾個常用的就行了。我以前初學時連常用的都時常記不住,那怎么辦呢,怎么知道它有那些屬性呢,以及怎么知道相應的屬性應該設置哪些值呢。其實這些在上期推送中就已經講過了:
直接在matlab命令行中輸入下面一行代碼,注意不要打分號,這樣可以輸出有哪些屬性:
結果如下:
圖2實際上它給我們顯示出來的這些就是常用的屬性,不過下面我會多添加幾個:
Style:控制UI控件的類型,默認為'pushbutton',在創建按鈕時可以不下,但最好還是在創建時寫上它。
Parent:控制UI控件的父容器,通俗的說就是告訴UI控件該放在誰上面(直接的關系),目前還沒講布局,就只能直接放在figure上,當講了布局后,這些控件都放在布局里面。雖然布局還是直接或者間接地放在figure中。為了說明按鈕放在哪里,所以這個Parent屬性必須寫(雖然有時不寫也行)。
String:顯示在按鈕(UI控件)上的字符串。
Tag:按鈕(UI控件)的ID,就跟我們的身份證一樣。這個在GUIDE中用的多,在GUIDE中通過handles.tag可以獲取相應的控件,在純代碼編寫GUI時多用于fandobj函數。這個就不細講了,知道存在這么個東西就好。
BackgroundColor:設置按鈕的背景色,可以是表示顏色的字母如:'k', 'r', 'g', 'b'等,也可以是1*3的向量,每個元素在0-1之間代表r,g,b的值。
ForegroundColor:按鈕上的字符串(String)的顏色
FontSize:按鈕上的字符(String)的大小
FontName:按鈕上的字符(String)的字體
Visible:控制該按鈕是否可見,默認是可見的
Units:控制按鈕的Position的值的單位,常用像素為單位:'pixels',如果要設置單位,那么單位一定要在Position之前設置。
Position:控制按鈕在窗口中的位置。以電腦屏幕為坐標平面的話,那么電腦屏幕的左下角點就是原點,position的值為:[x, y, w, h]:
實際上通常,也就用:Style, Parent, String, Units, Position, 以及后面講的callback。如果在熟悉了 布局 之后,連Units和Position都用不上。
獲取屬性可以設置哪些屬性值的方法還是和上期推送一樣。不過在UI控件這,好多屬性你這樣無法獲取某屬性可以設置哪些值,此時就要去幫助文檔中看看了:
常用屬性練習
在一個窗口中放一個寬400,高100的按鈕,按鈕上的文字為:I'm Mith Hong。文字的顏色為紅色,文字的大小為18,按鈕的背景色為黑色。
function?main()close?all
%%?創建主窗口
h_fig?=?figure('Name',?'MATLAB_GUI_教程(2)pushbutton',?...
????'MenuBar',?'none',?...
????'ToolBar',?'none');
%%?創建一個按鈕
btn?=?uicontrol('Style',?'pushbutton',?...
????'Parent',?h_fig,?...
????'String',?'I''m?Mitch?Hong',?...
????'FontSize',?18,?...
????'ForegroundColor',?'r',?...
????'BackgroundColor',?'k',?...
????'Units',?'pixels',?...
????'Position',?[50?50?400?100]);
end
結果如下:
圖5回調函數的編寫規則
設置回調函數:
uicontrol('Callback',{@btn_callback,input1,input2,…})其中回調函數名為btn_callback,@btn_callback表示獲取該回調函數的句柄;input1,input2,….為向callback中傳入實際參數;把他們用大括號括起來構成一個細胞數組作為Callback的屬性值。
回調函數的名字可以任意取,但是要有意義。
定義(編寫)回調函數:
function?btn_callback(obj,eventdata,input1,input2)其中obj與eventdata必須要有而且順序不能顛倒,如果函數體內用不上可以把這兩個位置用 ~ 來替換掉,從第三個位置開始按順序接受需要的輸入。
obj表示當前你所點擊的那個UI控件的句柄,event是一個事件,通常在uitable那用的多,這里先不解釋。
不要問為什么,這是規則,記就完事了。
Note
好像在16版開始,才能在同一個m文件中寫多個函數,如果是14版的,需要把回調函數單獨寫成一個文件!
GUI中各個回調函數之間數據的傳遞
setappdata
利用setappdata把數據保存到figure的appdata中:
setappdata(h_fig,?'myData1',?data1)其中data1是我們的數據,這樣就能把data1保存到figure的appdata中的myData1里面了。
getappdata
利用getappdata從figure的appdata中獲取數據:
data1?=?getappdata(h_fig,?'myData1');方法
因此我們只需要向各個回調函數中傳遞主窗口的句柄即可,這樣就能在不同的回調函數中傳遞數據了。
另外,一般我比較習慣把數據變量的名字和appdata中的名字寫成相同的,即:
setappdata(h_fig,?'data1',?data1)data1?=?getappdata(h_fig,?'data1');
如果不太明白的話,看看下面的例子就明白了。
按鈕的回調函數
這個在上面的回調函數的編寫規則中已經講了,這里就直接來個例子了。
例:在一個窗口中創建4個按鈕,在上面標號為1,2,3,4,
點擊按鈕1時,隱藏按鈕2,顯示按鈕3
點擊按鈕3時,隱藏按鈕1,顯示按鈕2
點擊按鈕2時,顯示按鈕1,隱藏按鈕3
點擊按鈕4時,都顯示
close?all
%%?創建主窗口
h_fig?=?figure('Name',?'MATLAB_GUI_教程(2)pushbutton',?...
????'MenuBar',?'none',?...
????'ToolBar',?'none');
%%?創建按鈕
btn1?=?uicontrol('Style',?'pushbutton',?...
????'Parent',?h_fig,?...
????'String',?'1',?...
????'Units',?'pixels',?...
????'Position',?[50?50?50?50],?...
????'Callback',?{@callback_btn1,?h_fig});
setappdata(h_fig,?'btn1',?btn1);?%?把btn1保存到appdata中以便于在其他回調函數中使用
btn2?=?uicontrol('Style',?'pushbutton',?...
????'Parent',?h_fig,?...
????'String',?'2',?...
????'Units',?'pixels',?...
????'Position',?[50?200?50?50],?...
????'Callback',?{@callback_btn2,?h_fig});
setappdata(h_fig,?'btn2',?btn2);?%?把btn2保存到appdata中以便于在其他回調函數中使用
btn3?=?uicontrol('Style',?'pushbutton',?...
????'Parent',?h_fig,?...
????'String',?'3',?...
????'Units',?'pixels',?...
????'Position',?[200?200?50?50],?...
????'Callback',?{@callback_btn3,?h_fig});
setappdata(h_fig,?'btn3',?btn3);?%?把btn3保存到appdata中以便于在其他回調函數中使用
btn4?=?uicontrol('Style',?'pushbutton',?...
????'Parent',?h_fig,?...
????'String',?'4',?...
????'Units',?'pixels',?...
????'Position',?[100?300?50?50],?...
????'Callback',?{@callback_btn4,?h_fig});
setappdata(h_fig,?'btn4',?btn4);?%?把btn4保存到appdata中以便于在其他回調函數中使用
end
%%?按鈕1的回調函數,obj和event我都用不上,所以用~代替
function?callback_btn1(~,?~,?h_fig)
%?獲取2?3?按鈕
btn2?=?getappdata(h_fig,?'btn2');
btn3?=?getappdata(h_fig,?'btn3');
%?點擊按鈕1時,隱藏按鈕2,顯示按鈕3
btn2.Visible?=?'off';
btn3.Visible?=?'on';
end
%%?按鈕2的回調函數,obj和event我都用不上,所以用~代替
function?callback_btn2(~,?~,?h_fig)
%?獲取1?3?按鈕
btn1?=?getappdata(h_fig,?'btn1');
btn3?=?getappdata(h_fig,?'btn3');
%?點擊按鈕2時,顯示按鈕1,隱藏按鈕3
btn1.Visible?=?'on';
btn3.Visible?=?'off';
end
%%?按鈕3的回調函數,obj和event我都用不上,所以用~代替
function?callback_btn3(~,?~,?h_fig)
%?獲取2?1?按鈕
btn2?=?getappdata(h_fig,?'btn2');
btn1?=?getappdata(h_fig,?'btn1');
%?點擊按鈕3時,隱藏按鈕1,顯示按鈕2
btn2.Visible?=?'on';
btn1.Visible?=?'off';
end
%%?按鈕4的回調函數,obj和event我都用不上,所以用~代替
function?callback_btn4(~,?~,?h_fig)
%?獲取1?2?3?按鈕
btn1?=?getappdata(h_fig,?'btn1');
btn2?=?getappdata(h_fig,?'btn2');
btn3?=?getappdata(h_fig,?'btn3');
%?點擊按鈕4時,都顯示
btn1.Visible?=?'on';
btn2.Visible?=?'on';
btn3.Visible?=?'on';
end
結果如下:
finall創作挑戰賽新人創作獎勵來咯,堅持創作打卡瓜分現金大獎
總結
以上是生活随笔為你收集整理的matlab table中的文字转string_MATLAB_GUI_教程(2)pushbutton的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 网络多人游戏架构与编程 电子书_Java
- 下一篇: mysql100多个字段如何优化_MyS