天天看點

MATLAB GUI程式設計總結MATLAB GUI程式設計總結:

大家好,又見面了,我是你們的朋友全棧君。

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