大家好,又見面了,我是你們的朋友全棧君。
MATLAB GUI程式設計總結:
- 建立Matlab GUI界面通常有兩種方式:
1 使用 .m 檔案直接動态添加控件
2 使用 GUIDE 快速的生成GUI界面
一、建立GUI
二、控件的使用
建立一個布局(視窗),可以在新視窗中添加如下控件
1.靜态文本(Static Text) 2.編輯框(Edit Text)控件
3.清單框(Listbox)控件 4.滾動條(Slider)控件
5.按鈕(Push Button)控件 6.開關按鈕(Toggle Button)控件
7.單選按鈕(Radio Button)控件 8.按鈕組(Button Group)控件
9.檢查框(Check Box)控件 10.清單框(Listbox)控件
11.彈出式菜單(Popup Menu)控件 12.坐标軸(Axes)控件
13.面闆(Panel)控件
複制
每一個控件都有自己的屬性正常屬性有:
一、控件風格和外觀
(1)BackgroundColor:設定控件背景顔色,使用[R G B]或顔色定義。
(2)CData:在控件上顯示的真彩色圖像,使用矩陣表示。
(3)ForegroundColor:文本顔色。
(4)String屬性:控件上的文本,以及清單框和彈出菜單的選項。
(5)Visible:控件是否可見。
二、對象的正常資訊
(1)Enable屬性: 表示此控件的使能狀态,設定為on”,表示可選,為“off”時則表示不可選。
(2)Style:控件對象類型。
(3)Tag:控件表示(使用者定義)。
(4)TooltipString屬性:提示資訊顯示。當滑鼠指針位于此控件上時,顯示提示資訊。
(5)UserData:使用者指定資料。
(6)Position:控件對象的尺寸和位置。
(7)Units:設定控件的位置及大小的機關
(8)有關字型的屬性,如 FontAngle, FontName等。
三、控件回調函數的執行
(1)BusyAction:處理回調函數的中斷。有兩種選項:即Cancel:取消中斷事件,queue:排隊(預設設定)。
(2)ButtonDownFcn屬性:按鈕按下時的處理函數。
(3)CallBack屬性:是連接配接程式界面整個程式系統的實質性功能的紐帶。該屬性值應該為一個可以直接求值的字元串,在該對象被選中和改變時,系統将自動地對字元串進行求值。
(4)CreateFcn:在對象産生過程中執行的回調函數。
(5)DeleteFcn:删除對象過程中執行的回調函數。
(6)Interruptible屬性:指定目前的回調函數在執行時是否允許中斷,去執行其他的函數。
四、控件目前狀态資訊
(1)ListboxTop:在清單框中顯示的最頂層的字元串的索引。
(2)Max:最大值。
(3)Min:最小值。
(4)Value:控件的目前值。
三:寫回調函數 CallBack
每個控件都有幾種回調函數,右鍵選中的控件一般會有如下菜單:
然後就可以跳轉到相應的 Editor中編輯代碼,GUIDE會自動生成 相應的函數體,函數名,名稱一般是 控件 Tag+ Call類型名 參數有三個 ( hObject, eventdata, handles)
其中 hObject 為發生事件的源控件,eventdata為事件資料結構,handles為傳入的對象句柄
CreateFcn 是在控件對象建立的時候發生(一般為初始化樣式,顔色,初始值等)
DeleteFcn 實在空間對象被清除的時候發生
ButtonDownFcn和KeyPressFcn分别為滑鼠點選和按鍵事件Callback
CallBack為一般回調函數,因不同的控件而已異。例如按鈕被按下時發生,下拉框改變值時發生,sliderbar 拖動時發生等等。
四:句柄圖形之間的層次關系
可以建立 圖形句柄的常見函數
1.figure函數:建立一個新的圖形對象。
2.newplot函數:做好開始畫新圖形對象的準備。
3.axes函數:建立坐标軸圖形對象。
4.line函數:畫線。
5.patch函數:填充多邊形。
6.surface函數:繪制三維曲面。
7.image函數:顯示圖檔對象。
8.uicontrol函數:生成使用者控制圖形對象。
9.uimenu函數:生成圖形視窗的菜單中層次菜單與下一級子菜單。
幾個實用的小函數:
uigetfile 選擇檔案對話框
uiputfile 儲存檔案對話框
uisetcolor 設定顔色對話框
fontsetcolor 設定字型對話框
msgbox 消息框
warndlg 警告框
helpdlg 消息框
不過如果要讓父視窗不可用,你需要使用uiwait來定焦于使用者對話框。
例如:
h=helpdlg(‘Please press me!’,‘Attention’);
uiwait(h);
四:擷取與設定對象屬性
常用函數:
gcf函數:獲得目前圖形視窗的句柄
gca函數:獲得目前坐标軸的句柄
gco函數:獲得目前對象的句柄
gcbo函數:獲得目前正在執行調用的對象的句柄
gcbf函數:擷取包括正在執行調用的對象的圖形句柄
delete函數:删除句柄所對應的圖形對象
findobj函數:查找具有某種屬性的圖形對象
設定方法:
(1)get函數傳回某些對象屬性的目前值。例如:
p=get(obj,‘Position’);
(2)函數set改變句柄圖形對象屬性,例如:
set(obj,‘Position’,vect);
五:函數調用
在一個m檔案中,可以定義多個函數,但是檔案名一定要與第一個函數(主函數)一緻,
該檔案中其他函數則為本檔案的私有函數,外部不可通路(可以通過參數調用的方法通路,下面會描述)。
例如在一個程式中,建立一個fig後,會生成這樣一個m檔案:
function varargout =febirdfun(varargin)
gui_Singleton = 1;
gui_State = struct(‘gui_Name’, mfilename, …
‘gui_Singleton’, gui_Singleton, …
‘gui_OpeningFcn’, @febirdfun_OpeningFcn, …
‘gui_OutputFcn’, @febirdfun_OutputFcn, …
‘gui_LayoutFcn’, [], …
‘gui_Callback’, []);
if nargin && ischar(varargin{1})
gui_State.gui_Callback = str2func(varargin{1});
end
if nargout
[varargout{1:nargout}] = gui_mainfcn(gui_State, varargin{:});
else
gui_mainfcn(gui_State, varargin{:});
end
解析 一下這個主函數:首先 gui_State是一個結構,指定了figure打開和輸出函數,
開始 gui_CallBack為空,如果輸入參數個數不為0,接下來将輸入第一個參數傳遞給gui_State.callback。
接下來用交給 gui_mainfcn函數處理,gui_mainfcn 根據gui_State和傳入參數
來确定是執子函數,還是打開 fig 檔案和運作 OpeningFcn和OutputFcn。
如過 gui_Callback為空,那麼就運作打開主視窗fig檔案,否則,調用子函數
這個函數的作用有:
1.當輸入不帶參數的時候,能夠打開fig檔案,并且初始化控件
2.當指定需要調用的函數名時,可以作為其他控件callback使用 (實則調用同檔案中的子函數)
例如,在某一個控件的 callback 裡面這樣寫:(febrdfun為主函數)
febirdfun(“@push_button_Callback”,gcbf,[])
這樣的調用就可以調用檔案裡面的子函數。
當然也可以使用其他檔案裡面的函數作為callback,不過那樣的話,資料傳遞會麻煩一些。
下面看figure Openning Function
%================================
function Main_OpeningFcn(hObject, eventdata, handles, varargin)
handles.output = hObject;
% 通常在這裡面定義自己的資料結構例如
s=struct(“P1”,v1…
“P2”,v2);
handles.MyStruct=s;
% 更新handles資料結構 非常重要!!
guidata(hObject, handles);
%================================
function varargout = Main_OutputFcn(hObject, eventdata, handles)
varargout{1} = handles.output;
這個函數是輸出傳回值的定義
注意: matlab 中,function 對應的 end 可以沒有,但是随着版本的更新,end将會被要求。
六、matlab中的資料
在MATLAB GUI中,資料分兩種:GUI data和application data。 兩種資料的存取機制是相同的,但是GUI data使用起來比較友善。
每一個GUI 圖形界面都維持一個和自己的界面的圖形(figure)相聯系的一個handles資料結構,這個資料結構中容納圖形界面内所有控件(按鈕、清單框、編輯框等)的句柄,相當于一個大的“容器”,裡面存放了figure内所有控件的句柄。
同時,handles結構也可以被figure内所有控件的回調函數通路,因為回調函數的輸入參數中都有handles結構。此外,在控件的回調函數内可以把資料存儲到handles結構中。
guidata函數:取得和存儲handles結構資料
例如:在編輯框edit的回調函數内想獲得t編輯框的句柄,hObject可以,也可用handles.edit,這兩個值是一樣的,沒有差別,隻不過獲得控件句柄的方式不同而已
hObject是調用回調函數時直接傳過來的
handles.edit是從handles結構中取得的。
但是,在控件的CreateFcn函數中如果想通路控件,必須用hObject,而不能用handles.edit,因為這時控件還沒被建立,其句柄還沒有加入到handles結構中。
各控件的回調函數中,hObject的值是不一樣的,分别代表調用回調函數的控件的句柄,而handles結構卻是一樣的。這種機制便于figure内的不同控件的回調函數内傳遞資料。
複制
把進度條嵌入到matlab GUIDE界面中
function mywaitbar(x,varargin)
if nargin < 1
error('Input arguments not valid');
end
fh = varargin{end};
set(0,'CurrentFigure',fh);
%fAxes = findobj(fh,'type','axes');
fAxes =varargin{2};
set(fh,'CurrentAxes',fAxes);
if nargin > 1
hTitle = get(fAxes,'title');
set(hTitle,'String',varargin{1});
end
fractioninput = x;
x = max(0,min(100*x,100));
if fractioninput == 0
cla
xpatch = [0 x x 0];
ypatch = [0 0 1 1];
xline = [100 0 0 100 100];
yline = [0 0 1 1 0];
patch(xpatch,ypatch,'r','EdgeColor','r','EraseMode','none');
set(fh,'UserData',fractioninput);
l = line(xline,yline,'EraseMode','none');
set(l,'Color',get(gca,'XColor'));
else
p = findobj(fh,'Type','patch');
l = findobj(fh,'Type','line');
if (get(fh,'UserData') > fractioninput)
set(p,'EraseMode','normal');
end
xpatch = [0 x x 0];
set(p,'XData',xpatch);
xline = get(l,'XData');
set(l,'XData',xline);
end
drawnow;
%主程式調用:修改句柄函數值就可以指定axes1作為條形框了
h1=findobj(handles.axes1,'visible','off');%擷取按鍵1的可視化句柄
set(h1,'visible','on');%設定句柄為可見
mywaitbar(0,'Please Wait...',handles.axes1,handles.figure1);
TheEndTime = 600;
for t = 1:TheEndTime
mywaitbar(t/TheEndTime,[num2str(floor(t*100/TheEndTime)),'%'],handles.axes1,handles.figure1);
end
複制
matlab中delete、close、cla、cla含義
matlab中删除對象
删除對象
(1)delete:删除檔案或對象圖形
删除檔案對象h的格式為:delete(‘filename’)或delete filename
删除圖形對象h的格式為:delete(h);
若要無條件删除所有的圖形對象,則:set(0,‘showhiddenhandles’,‘on’);delete(get(0,’’children));
(2) clf:清空目前figure視窗。
格式如下:
clf:删除目前視窗中所有對象(handlevisibility的值為on)
clf(‘rest’):删除目前視窗所有對象(不論句柄是否隐藏);并重設fig屬性為系統預設值,但以下4個屬性保留原值:position,units,paperposition,paperunits。當人若integerhandle屬性值為off,重設後,integerhandle屬性值為on原浮點形式的句柄無效,此時Matlab會自動為其配置設定一個整形句柄,原句柄失效。若要傳回新建立的整形句柄,使用下面的格式:
figure handles=clf(fig.‘reset’);
若在使用過程中(handlevisibility的值為off)照樣删除視窗中所有對象,并重設視窗屬性。
(3)cla:清除目前坐标系。
格式如下
cla:删除目前坐标軸中句柄不隐藏的對象(handlevisibility的值為on)
cla rest:删除目前坐标系中所有的對象(不論句柄是否隐藏),并重設axes屬性為預設值,但以下2個屬性保留原值:position和units
(4)close:關閉目前視窗。
其調用格式列舉如下:
close:關閉目前視窗,等價于close(gcf)
close(h):關閉對象h的視窗
close name:關閉名為h的視窗
close all:關閉所有句柄可見的視窗
close all hidden:關閉所有的視窗
close all force:關閉所有的gui視窗,即使該視窗的closerequestfcn設定該視窗不關閉。
status=close(……):關閉指定視窗,成功傳回1,否則,傳回0。
close函數調用時,會執行指定的figure對象的closerequestfcn函數。該函數預設執行closereq,該函數相當于delete(get(0,‘currentfigure’)).而delete函數不執行closerequestfcn函數,它僅僅删除指定的figure。
(5)closereq:預設的視窗請求關閉函數,無輸入和輸出參數,相當于delete(gcf).
MATLAB 中GUI edit的多行設定
Edit多行設定,要把Edit的Max和Min屬性修改,令Max-Min>2(其實Max表示最多多少行,Min表示最少多少行)。
然後set字元串的時候,用數字”10″作換行符(因為換行符的ASCII碼是10)。
代碼如下:
str1 = [‘第一行’, 10];
str2 = [‘第二行’, 10];
str3 = [‘第三行’, 10];
str4 = ‘沒有了’;
str = [str1, str2, str3, str4];
set(handles.editResult, ‘string’, str);
釋出者:全棧程式員棧長,轉載請注明出處:https://javaforall.cn/130595.html原文連結:https://javaforall.cn