關於matlab GUI 的一些總結


最近在 用matlab做一個GUI的用戶界面 大多都是百度出來 摸索的學習 總結一下遇到的一些問題和解決方法

一:

  在文本框動態顯示文本 (保留之前的文本並顯示當前文本內容):

     在文本框顯示文本 基本的語法是 

 set(handles.listbox2,'String',string);

<1>想要保留之前文本內容  用過網上提供的代碼 textwrap函數

(但是 當從 str =get(handles.listbox2,'String'); 得到的str放到string{}里面 textwrap會提示錯誤 ....orz 錯誤提示忘記截圖了)

figure('units','normalized','position',[0.4 0.4 0.4 0.3]);
h = uicontrol('Style','Text','fontsize',16);
string = {'靜態文本框為什么是靜態的?','因為不能像編輯框一樣滾動顯示其中的內容','如果想在靜態文本框中多行顯示','按照這種方式就可以實現','調用textwrap函數啊!'};
[outstring,newpos] = textwrap(h,string);
set(h,'String',outstring,'Position',newpos);

<2>后來也想過更新txt 然后將txt內容顯示在文本框呢  遇到的問題是 從txt文檔一行一行讀字符串 顯示在文本框的字符是在一整行的 (;′⌒`)

<3> 下面是常用的方法 (百度好久查到的  )

    這個方式邏輯上是沒有什么的 也沒有語法錯誤  但是 我遇到了至今未解決的問題 :理想情況 ->程序邊運行邊在文本框顯示文本內容  

       現實情況—> 不能實時顯示文本內容 要等到程序運行玩才能全部顯示出來 更新速度太慢 不知道這種情況能不能改進  

ss = get(handles.listbox2,'String');
str =sprintf('XXXXXX');
 ss{end+1}=str;
set(handles.listbox2,'String',ss);

二:matlab 按鈕之間的參數傳遞

<1> 第一種方式的傳遞參數 更適合多個GUI之間的傳遞 如果是單個GUI傳遞 會面臨一個 txt文本保留了之前的數據或覆蓋之前的數據(比如你可能會多次使用一個數據)

setappdata(0,'A',A)
A=getappdata(0,'A').

<2>第二種方式  會遇到未知的錯誤 比如 我使用的時候  它很奇怪的並沒有實現參數傳遞 

handles.in1 = varargin{1};
handles.in2 = varargin{2};
guidata(hObject, handles);  %保存

<3> 第三種方式 是我認為最簡單的 也是我經常使用的一種方式  但是但是,簡單的問題就在於有時你會很頭疼!因為在每一個要到該全局變量的地方,你都要添一句gloal x,還有就是如果你在一個地方修改了x的值,那么所有x的值就都變了!有的時候恐怕會出現紊亂。另一個更重要的問題在於,套用C++的一句話,全局變量破壞了程序的封裝性!所以,全局變量是能少用盡量少用。 (碰巧我的程序里面 不需要修改他們值 只是簡單的使用)

<4>還有其他的一些方式 參見 http://blog.sina.com.cn/s/blog_6163bdeb0100i2j4.html

三:顯示程序運行的時間

tic;
/..../ %代碼
toc;
sprintf(‘%s’,num2str(toc)); %顯示的程序運行的時間

timer類定時器(之后應該還會寫一篇它的實時處理數據,目前還沒有研究通)

t=timer('TimerFcn',{@timercallback,handles},'ExecutionMode', 'fixedRate', 'Period', 0.01);
start(t);

四:matlab kmeans 函數注意的地方

     當要聚類的數據只有一組向量是..... 

[idx1,c1,sumD1,D1] = kmeans(T,1);

c1 是個1*1的數 orz   還有就是 默認的距離是 平方歐式距離     (⊙﹏⊙)b 坑了我好久 ><!!


五:GUI對話框設計(復制 方便看)

from: http://heatflow.blog.163.com/blog/static/193360279201172191146666/

dialog 創建對話框 
errordlg 創建錯誤對話框 
helpdlg 創建幫助對話框 
inputdlg 創建輸入對話框 
listdlg 創建選擇列表對話框 
msgbox 創建消息對話框 
pagedlg 顯示頁面的版面對話框 
printdlg 顯示打印對話框 
questdlg 問題對話框 
uigetfile 文件檢索對話框 
uiputfile 為寫入而顯示的檢索對話框 
uisetcolor 從對話框交互式設置對象的ColorSpec 
uisetfont 交互設置對象字體特征 
warndlg 警告對話框

 

*對話框設計:在圖形用戶界面程序設計中,對話框是重要的信息顯示和獲取輸入數據的用戶界面對象。

1、公共對話框:

公共對話框是利用windows資源的對話框,包括文件打開、文件保存、顏色設置、字體設置、打印設置等。

1) 文件打開對話框:用於打開文件

uigetfile

uigetfile(‘FilterSpec’)

uigetfile(‘FilterSpec’,’DialogTitle’)

uigetfile(‘FilterSpec’,’DialogTitle’,x,y)

[fname,pname]=uigetfile(…)

2) 文件保存對話框:用於保存文件

uiputfile

uiputfile(‘InitFile’)

uiputfile(‘InitFile’,’DialogTitle’)

uiputfile(‘InitFile’,’DialogTitle’,x,y)

[fname,pname]=uiputfile(…)

3) 顏色設置對話框:用於圖形對象顏色的交互設置

c=uisetcolor(‘h_or_c,’DialogTitle’)

4) 字體設置對話框:用於字體屬性的交互式設置

uisetfont

uisetfont(h)

uisetfont(S)

uisetfont(h,’DialogTitle’)

uisetfont(S,’DialogTitle’)

S=uisetfont(…)

5)打印設置對話框:用於打印頁面的交互式設置

dlg=pagesetupdlg(fig)

pagedlg

pagedlg(fig)

6) 打印預覽對話框:用於對打印頁面進行預覽

printpreview

printpreview(f)

7) 打印對話框

printdlg

printdlg(fig)

printdlg(‘-crossplatform’,fig)

printdlg(-‘setup’,fig)

 

 

2、MATLAB專用對話框

1)錯誤信息對話框:用於提示錯誤信息

errordlg 打開默認的錯誤信息對話框

errordlg(‘errorstring’) 打開顯示’errorstring’信息的錯誤信息對話框

errordlg(‘errorstring’,’dlgname’) 打開顯示’errorstring’信息的錯誤信息對話框,對話框的標題由‘dlgname’指定

erordlg(‘errorstring’,’dlgname’,’on’) 打開顯示’errorstring’信息的錯誤信息對話框,對話框的標題由‘dlgname’指定. 如果對話框已存在,’on’參數將對話框顯示在最前端。

h=errodlg(…) 返回對話框句柄

例:errordlg('輸入錯誤,請重新輸入','錯誤信息')

 

2) 幫助對話框:用於幫助提示信息

helpdlg 打開默認的幫助對話框

 

helpdlg(‘helpstring’) 打開顯示’errorstring’信息的幫助對話框,

helpdlg(‘helpstring’,’dlgname’) 打開顯示’errorstring’信息的幫助對話框, 對話框的標題由‘dlgname’指定

 

h=helpdlg(…) 返回對話框句柄

例:helpdlg('矩陣尺寸必須相等','在線幫助')

 

 

3) 輸入對話框:用於輸入信息

answer=inputdlg(prompt) 打開輸入對話框,prompt為單元數組,用於定義輸入數據窗口的個數和顯示提示信息,answer為用於存儲輸入數據的單元數組。

answer=inputdlg(prompt,title) 與上者相同,title確定對話框的標題。

answer=inputdlg(prompt,title,lineNo) 參數lineNo可以是標量、列矢量或m×2階矩陣,若為標量,表示每個輸入窗口的行數均為lineNo;若為列矢量,則每個輸入窗口的行數由列矢量 lineNo的每個元素確定;若為矩陣,每個元素對應一個輸入窗口,每行的第一列為輸入窗口的行數,第二列為輸入窗口的寬度。

answer=inputdlg(prompt,title,lineNo,defAns) 參數defans為一個單元數組,存儲每個輸入數據的默認值,元素個數必須與prompt 所定義的輸入窗口數相同,所有元素必須是字符串。

answer=inputdlg(prompt,title,lineNo,defAns,Sesize) 參數resize決定輸入對話框的大小能否被調整,可選值為on或off.

例:prompt={'Input Name','Input Age'};

title='Input Name and Age';

lines=[2 1]';

def={'John Smith','35'};

answer=inputdlg(prompt,title,lines,def);

 

 

4) 列表選擇對話框:用於在多個選項中選擇需要的值

[selection,ok]=listdlg(‘Liststring’,S,…) 輸出參數selection為一個矢量,存儲所選擇的列表項的索引號,

輸入參數為可選項’Liststring’(單元數組), ’SelectionMode’(’single’或’multiple’, ’ListSize’([wight,height]), ’Name’ (對話框標題)等

 

 

5) 信息提示對話框:用於顯示提示信息

msgbox(message) 打開信息提示對話框,顯示message信息。

msgbox(message,title) title確定對話框標題。

msgbox(message,title,’icon’) icon用於顯示圖標,可選圖標包括:none(無圖標)/error/help/warn/custom(用戶定義)

msgbox(message,title,’custom’,icondata,iconcmap) 當使用用戶定義圖標時,icondata為定義圖標的圖像數據,iconcmap為圖像的色彩圖。

msgbox(…,’creatmode’) 選擇模式creatmode,選項為:modal, non_modal, 和replace。

h=msgbox(…) 返回對話框句柄

 

 

6) 問題提示對話框:用於回答問題的多種選擇

button=questdlg(‘qstring’) 打開問題提示對話框,有三個按鈕,分別為:yes,no和cancel,’questdlg’確定提示信息。

button=questdlg(‘qstring’,’title’) title確定對話框標題。

button=questdlg(‘qstring’’title’,’default’) 當按回車鍵時,返回default值default 必須是yes,no或cancel 之一。

button=questdlg(‘qstring’,’title’,’str1’,’str2’,’default’) 打開問題提示對話框,有兩個按鈕,分別由str1和str2確定,’qstdlg’確定提示信息,default必須是str1或str2之一。

button=questdlg(‘qstring’, ’title’,’str1’,’str2’,’str3’,’default’) 打開問題提示對話框,有三個按鈕,分別由str1, str2和str3確定,’qstdlg’確定提示信息,default必須是str1, str2或str3之一。

 

7) 進程條:以圖形方式顯示運算或處理的進程

h=waitbar(x,’title’) 顯示以title為標題的進程條,x為進程條的比例長度,其值必須在0到1之間,h為返回的進程條對象的句柄。

waitbar(x,’title’,’creatcancelbtn’,’button_callback’) 在進程條上使用creatcancelbtn參數創建一個撤銷按鈕,在進程中按下撤銷按鈕將調用button_callback函數。

waitbar(…,property_name,property_value,…) 選擇其它由prompt_name定義的參數,參數值由prompt_value指定。

例:

h=waitbar(0,'pleas wait...');

for i=1:10000

waitbar(i/10000,h)

end

close(h)

 

 

 

 

MATALB的標准圖形用戶界面


1. 消息對話框

msgbox函數。它不接受用戶的任何輸入,在用戶單擊OK按鈕后,對話框自動關閉,然后返回程序中繼續執行。
>> msgbox('歡迎使用MATLAB') % 建立一個沒有標題的消息對話框
>> msgbox('歡迎使用MATLAB','MATALB','warn') %% 建立一個有標題的消息對話框

2. 錯誤對話框
errordlg函數。 >> errordlg %建立一個默認參數的錯誤對話框
>> errordlg('這是一個錯誤對話框','MATLAB error') %建立一個名為MATLAB error的錯誤對話框

3. 警告對話框
warndlg函數。 >> warndlg %建立一個默認參數的警告對話框
>> warndlg('這是一個警告對話框','MATLAB warning')

4. 幫助對話框
helpdlg函數。
>> helpdlg('你需要幫助嗎?','MATLAB Help')

5. 進度條設置對話框
waitbar函數。作用是反映程序運行的完成情況。
h=waitbar(0,'請稍等......')
for i=1:10000
waitbar(i/10000)
end

 

6.輸入對話框
inputdlg函數。
prompt={'輸入梯形的上底:','輸入梯形的下底','輸入梯形的高'};%設置提示字符串
name='Enter trapeaia Data';%設置標題
numlines=1;%指定輸入數據的行數
defAns={'20','50','40'};%設定默認值
Resize='on';%設定對話框尺寸可調節
answer=inputdlg(prompt,name,numlines,defAns,'on')%創建輸入對話框

7. 列表對話框
listdlg函數。
p=path(path,'C:\MATLAB7\work');%設置路徑,若為當前目錄,可以省略這一步
d=dir('C:\MATLAB7\work');%獲取指針,若為當前目錄,則d=dir
str={d.name};%獲取目錄內的文件名
[sel,ok]=listdlg('Liststring',str,'PromptString','請選擇文件','SelectionMode','Multiple')%創建列表對話框。
文件選擇成功后,單擊“OK‘按鈕,系統將選擇好的文件序號存入相應向量sel,參數ok的值為1。

 

8.問題對話框
questdlg函數。提出一個問題,等待用戶回答。默認下回答按鈕有三個:Yes、No、Cancel。當用戶單擊任何一個按鈕時,系統將該按鈕名保存在一個變量(ButtonName)中。如果用戶關閉對話框,則系統將ButtonName置為空。
>> ButtonName=questdlg('你准備好了嗎?','MATLAB quest','Yes','No','Cancel','Yes')

9.路徑選擇對話框
uigedir函數。用於用戶查找和選擇路徑。
>> directoryname=uigetdir('C:\MATLAB7\work','瀏覽文件件')

10.選擇文件對話框
uigetfile函數。用於用戶選擇所需的文件。
① >> [fn,pn,fi]=uigetfile('*.m','select a M-file')%打開一個選擇M文件的對話框,並選擇一個文件
② [fn,pn,fi]=uigetfile(...
{'*.m;*.fig;*.mat;','All MATLAB File(*.m,*.fig,*.mat,*.mdl)';
'*.m','M-file(*.m)';...
'*.fig','Figure(*.fig)';...
'*.mat','MAT-flie(*.mat)';...
'*.mdl','Models(*.mdl)';...
'*.*','All Flies(*.*)'},...
'Pick a file')
%打開一個選擇多種文件的對話框,並選擇一個文件

11.文件保存對話框
uiputfile函數。用於保存文件。
① >> [fn,pn,fi]=uiputfile('*.m','Save selected a M-file')
② [fn,pn,fi]=uiputfile(...
{'*.m;*.fig;*.mat;','All MATLAB File(*.m,*.fig,*.mat,*.mdl)';
'*.m','M-file(*.m)';...
'*.fig','Figure(*.fig)';...
'*.mat','MAT-flie(*.mat)';...
'*.mdl','Models(*.mdl)';...
'*.*','All Flies(*.*)'},...
'Save a file')
%建立多種保存文件的對話框,並選擇一個文件

12.頁面設置對話框
pagesetupdlg函數。用來設置頁面的各種屬性、參數。調用格式為:
dlg=pagesetupdlg(fig)
該命令創建一個頁面設置對話框,在該對話框用戶可以設置頁面的各種屬性和參數。該命令只支持單一圖形窗口的頁面設置,參數fig也必須是單一的圖形句柄,不可以是圖形句柄向量或simulink圖。
>> fig=figure;
>> dlg=pagesetupdlg(fig)

13.打印設置對話框
printdlg函數。用戶可以對各種打印參數進行設置。
x=[-pi:0.02:pi];
y=cos(x);
fig=figure;
plot(x,y);
printdlg(fig);%打開Windows打印對話框
printdlg('-crossplatform',fig);%打開MATLAB打印對話框


14.顏色設置對話框
uisetcolor函數。用於用戶設置圖形的前景色或背景色。
① >> c=uisetcolor %建立一個顏色選擇對話框
② %建立一個顏色對話框,並設置對話框的初始顏色,然后選擇一種顏色用於一個圖形對象。
x=[0:0.02:2*pi];
y=sin(x);
h=figure;
plot(x,y);
c=uisetcolor(h,'select color')


15.字體設置對話框
uisetfont函數。用於用戶設置或修改文本字體、坐標軸或設置控件對象的顯示文本的字體屬性。
① >> s=uisetfont % 建立一個默認字體設置對話框,並設置一種字體。
② 對控件中的文本進行設置
T1=uicontrol('style','pushbutton','string','確定',...
'position',[200 320 60 20]); %創建一個按鈕
T2=uicontrol('style','pushbutton','string','取消',...
'position',[200 220 60 20]); %創建一個按鈕
s=uisetfont(T1) %打開字體設置對話框
set(T2,s) %將T1的設置復制到

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM