MATLAB(3)——GUI界面設計入門


作者:桂。

時間:2017-03-01  18:43:35

鏈接:http://www.cnblogs.com/xingshansi/articles/6485688.html

聲明:轉載請注明出處,謝謝。


 

前言

本文為MATLAB系列第三篇,主要是自己學習GUI界面設計的記錄,此文后續會不定期更新。寫本文的初衷是:

  如何讓一個不懂MATLAB的人員,可以進行一些操作,或者設定一些參數?

文章內容主要為自己的學習筆記,內容多有借鑒他人,最后把鏈接一並附上。

 

 

 

 

一、搭建最基本的GUI

本節通過兩個例子進行論述,分別介紹GUI基本操作,即數值運算、數據導入、圖形繪制等功能的GUI實現。

  A-加法器

 首先上效果圖:

輸入兩個數值,點擊Add!,便可顯示結果,下面開始逐步介紹。

  • GUI新建

常用的新建GUI方法有兩個:

    1. Command Window輸入guide—>Create New GUI;
    2. Home—>New—>Graphical User Interface;

注意:勾選“Sace new figure as:”,可選擇存儲路徑,並對文件命名。

這里我們選擇默認的“Blank GUI(Default)”,點擊“OK”,便可進入, 本文主要用到以下幾個選框:

  • GUI框架搭建

本文為基礎內容,框架內修改的主要是

點擊需要添加的選框至面板中,雙擊選框,特性中:

其中

String:顯示的名稱;

Tag:標簽,主要用於程序編寫時,對變量進行定位;

常用:

position:指示空間在figure中的位置
font**:字體相關屬性
string:相當如VB中的caption,就是顯示在控件上的文字
tag:控件的唯一標識符,相當於ID,我們需要tag來指定某一個空間

因此,我們只需要設定參與操作的選框tag;對於不涉及操作、僅僅作為顯示的選框,其tag我們可以默認。

分析加法器,我們總共需要的選框:

其中,涉及操作的有:

兩個輸入(兩個編輯文本框) + 一個執行加法運算的開關(一個確定按鈕)+結果顯示(一個靜態文本框)。

設置完成的效果圖:

點擊“保存”,此時便出現.m和.fig兩個文件,加法器的GUI框架搭建完畢。

  • GUI對應代碼完善

步驟一:設定tag、String等參數;

  首先是回調函數的定位(如果已經退出GUI編輯框,可Command Window輸入guilde進入):

選中並右鍵—>Viwe Callbacks—>Callback,即可打開對應的函數模塊。

對應提取數據的代碼(提出為字符,需要進行str2num的轉換)

a = get(handles.input_a,'String');%String的S大寫

  假設兩個輸入框的String分別設為0(無輸入默認顯示0),tag分別設定為:

    • input1_editText,input2_editText

  OK按鈕重命名:String設置為:Add! 對應tag為:

    • add_pushbutton

  結果的String設為0,對應tag設為:

    • answer_staticText

步驟二:讀取輸入參數

打開第一個輸入框,函數模塊初始為

function input1_editText_Callback(hObject, eventdata, handles)
% hObject    handle to input1_editText (see GCBO)
% eventdata  reserved - to be defined in a future version of MATLAB
% handles    structure with handles and user data (see GUIDATA)

% Hint: get(hObject,'String') returns contents of input1_editText as text
%        str2double(get(hObject,'String')) returns contents of
%        input1_editText as a double

  編輯回調函數,修改為:

% handles 包含figure中所有圖形對象句柄的結構體,如果我們想引用tag為mytag的控件,使用handles.mytag
% set/get 函數是用來設置/獲取某個控件屬性
% 使用get命令獲取第一個加數,並將它轉換成數值
input = str2num(get(hObject,'String')); % string屬性是字符串,所以必須轉換成數值

% 檢驗輸入是否為空,是則將它置為0
if (isempty(input))
     set(hObject,'String','0')
end

% 保存handles結構體,只要在handles結構體有改變時,才需要保存
guidata(hObject, handles); % 這里由於handles沒有改變,故這里其實沒有必要,建議在所有Callback最后都添加該命令,此處為將參數設定為GUI變量,可全局調用。

  第二個輸入框同第一個輸入框的操作相同;

步驟三:輸出結果的顯示

  關聯控制鍵,並將結果賦給對應的tag,初始的回調函數:

% --- Executes on button press in add_pushbutton.
function add_pushbutton_Callback(hObject, eventdata, handles)
% hObject    handle to add_pushbutton (see GCBO)
% eventdata  reserved - to be defined in a future version of MATLAB
% handles    structure with handles and user data (see GUIDATA)

  修改后:

a = get(handles.input1_editText,'String');
b = get(handles.input2_editText,'String');
% a和b是字符串變量,我們需要使用str2double函數將其轉換為數值
% 然后才能相加,否則字符串是沒法相加的
total = str2num(a) + str2num(b);  % 格式轉換,轉換為數值
% 由於string屬性是字符串,所以必須將兩個數的和轉換為字符串
c = num2str(total); % 轉換為字符串
%  將結果賦值給answer_staticText空間的string屬性,於是就可以顯示結果了
set(handles.answer_staticText,'String',c);
guidata(hObject, handles); % 更新結構體

  至此,完成了GUI代碼的完善。

  • GUI運行

GUI的運行主要分為三種方式。

方式一:Current Directory運行.m文件

  同普通程序運行一致,運行結束即彈出GUI畫框,按要求操作即可。

方式二:GUI界面run

  Command Window輸入guide,進入GUI編輯界面,點擊右上角的,即彈出GUI界面。

方式三:Command Window運行GUI文件名

  例如有GUI程序:example.fig,切換到該文件的目錄下,在Command Window輸入example,回車運行,即彈出GUI界面。

自己實現了GUI零的突破,希望后面掌握相關技巧后,來一個加法器的GUI升級。

                              ——記錄此處,提醒自己

 

  

  

B-語音增強

  學習GUI,實現最基本的功能,讀取一段語音信號(co-channel),並對帶噪信號進行歸一化自適應濾波(NLMS),實現語音信號增強。這里給出讀取文件的指令,

降噪以及NLMS等算法的實現,具體參考自適應濾波。本文不再展開論述,感興趣的朋友,可以拿這個作為小練習(●'◡'●)。

實現功能描述:

1)點擊“load”,加載需要處理的語音信號;

2)讀取並對帶噪信號進行自適應濾波;

3)繪制處理前后語音信號的時域波形圖、時頻能量圖;

%==============加載文件指令=======================
[FileName,PathName] = uigetfile('*.wav');  %打開對話框  
fle = [PathName FileName];                 % 構成完整的路徑和文件名
[s,fs,nbits] = wavread(fle);  %新版本MATLAB為audioread
%==============繪圖指令==========================
%需要在GUI界面插入axes框
axes(handles.axes3);      %打開的文件顯示在第一個圖 
plot(time,r1./max(abs(r1)),'k');
ylabel('幅度');xlabel('時間(s)');
title('帶噪信號波形圖');

對應效果圖:

感興趣的朋友可以留言交流:Q-441039377。

二、生成.exe可執行文件

GUI界面固然友好,但很多朋友甚至不會操作MATLAB界面,如何讓他們進行一些操作呢?利用程序生成.exe是一個不錯的辦法。  

  如果計算機已經安裝編譯器,即可直接在Command Window輸入:

mcc -m 文件名;%文件名為*.m的部分

  此時,對應文件夾下會出現:文件名.exe 。雙擊運行即可進入GUI界面,無需通過MATLAB打開,對於更小白的人士,可以發送桌面快捷方式。

  如果沒有安裝編譯器,則需要如下操作:

    • 安裝編譯器:
      Command Window輸入:mex -setup;  
      然后根據提示選擇,直到安裝完畢;
    • 設置編譯器:
      Command Window輸入:mbuild -setup;
      然后根據提示選擇,直到操作結束;
    • 將腳本編譯為exe可執行文件:
      如文件夾下有:example.m  example.fig;
      則Command Window輸入:mcc -m example;

參考:

加法器設計:http://www.matlabsky.com/thread-5217-1-1.html

exe生成:http://blog.csdn.net/qq_20823641/article/details/51863737


免責聲明!

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



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