Beruflich Dokumente
Kultur Dokumente
Inicio
Interfazgrficodeusuario
MATLAB
Interfazgrficodeusuario(I)
GUIDEproporcionaunconjuntodeherramientasparacrearuninterfacegrficodeusuario.Estasherramientas
simplificanelprocesodediseoycreacindelinterfacegrfico.Enlaventanagrficasepuedendisponer
paneles,botones,cuadrosdetexto,barrasdedesplazamiento,etc.Generaautomticamente,dosficherosunocon
extensin.figquecontienelainformacinsobreelaspectovisualdelinterfaceyotrofichero.menelquese
codificalarespuestaalasaccionesdelusuariosobreloscontroles.
ParaponerenmarchaelprogramaenlaventandecomandosdeMATLAB
>>guide
Elegimoslaopcinpordefecto,BlankGUI.Acontinuacin,apareceunaventana.Enlaparteizquierda,se
disponelapaletadecontrolesyenelpanelsituadoenlapartederechasesitanloscontroles.
Controlesdetextoybotn
Nuestroproyectoinicialvaaconsistirenunapequeacalculadora,quesumedosnmerosalpulsarelbotn
tituladoSumaymuestreelresultado.Situamosloscontrolesendoslneas:doscontrolesdetexto(EditText)en
lafilasuperior,paraintroducirlosnmeros,elbotnyotrocontroldetextoesttico(StaticText)enlafila
inferiorparamostrarelresultado.Conelratnsesituaelcontrolelegidosobreelpanel,secambiasutamaoy
tambin,sepuedenhacerpequeosajustesensuposicinutilizandolasteclasdelcursor.
Haciendodobleclicsobreuncontrolaparecesuhojadepropiedades,talcomosemuestraenlafigura.La
propiedadTageslamsimportanteyaqueidentificacadacontrolenelcdigo,portantodebemosdeasignarun
nombresignificativoadichocontrol.
http://www.sc.ehu.es/sbweb/energiasrenovables/MATLAB/gui/gui_1.html
1/9
27/11/2014
Interfazgrficodeusuario
Enlaparteinferiordelahojadepropiedadesdelbotn,cambiamossupropiedadTag,porbtnSuma.Esta
propiedadesimportanteyaqueeselnombreconelqueseconocealcontrolenelcdigo.Cambiamosla
propiedadStringporSuma,queeselttulodelbotnycambiamoseltamaodelafuentedetexto,FontSize,a
14,yelestiloFontWeightabold(negrita)paraqueseleabien.
Hacemosdobleclicsobreelprimercontroldetexto,cambiamossupropiedadTagpornum_1,supropiedad
Stringpor20yeltamaodelafuentedetexto,FontSizea14.
Hacemoscambiosenlahojadepropiedadesdelsegundocontroldetexto,cambiamossupropiedadTagpor
num_2,supropiedadStringpor15yestablecemossupropiedadFontSizeen14.
Hacemosdobleclicsobreeltercercontroldetexto,cambiamossupropiedadTagporresultado,supropiedad
Stringpor35,eltamaodelafuentedetexto,FontSizea14,yelestiloFontWeightabold(negrita).
Elresultadofinaleselsiguiente
Sehageneradounficherocalculadora.menelquehemosdeinsertarelcdigodelarespuestaalasaccindel
usuariocuandosepulsaelbotnSuma.BuscamoslafuncinbtnSuma_Callback.
...
end
%SeejecutaalpulsarelbotnbtnSuma.
functionbtnSuma_Callback(hObject,eventdata,handles)
http://www.sc.ehu.es/sbweb/energiasrenovables/MATLAB/gui/gui_1.html
2/9
27/11/2014
Interfazgrficodeusuario
%insertaraquelcdigo
functionresultado_Callback(hObject,eventdata,handles)
...
1. Obtenemoseltextoquesehaintroducidoenloscontrolesdeedicin(EditText)num_1ynum_2,mediantela
funcinget.
2. Convertimoseltextoenunnmeromediantelafuncinstr2double
3. Sumamoslosdosnmerosyloguardamoselresultadoenlavariableres.
4. Convertimoselresultadoatextomediantelafuncinnum2str
5. Ponemosmedianteseteltextoenelcontroldetextoesttico(StaticText)resultado
functionbtnSuma_Callback(hObject,eventdata,handles)
s1=get(handles.num_1,'String')
x1=str2double(s1)
s2=get(handles.num_2,'String')
x2=str2double(s2)
res=x1+x2
str=num2str(res)
set(handles.resultado,'String',str)
Elvalordeunapropiedaddeuncontroldeterminadoseobtienemediantelafuncinget:
get(nombre_control,'propiedad')
ElnombredelcontrolserefierealquehemosestablecidoenlapropiedadTag
Lafuncinsetcambiaelvalordeunapropiedaddeundeterminadocontrol:
set(nombre_control,'propiedad',nuevo_valor).
LaaccindelusuariosobreelbotnbtnSuma,setraduceenlallamadaalafuncinbtnSuma_Callback,encuyo
primerparmetrohObjectselepasaelnombredelcontrolbtnSumaquellamaadichafuncin,talcomoveremos
msadelante.
Guardamosloscambiosrealizadosenelficherocalculadora.m,ycorremospulsandoenelbotn(flechaverde)
Run
CuandonohaycaracteresnumricosenuncontroldeedicinalpulsarelbotnSumaobtenemosNaN.Para
evitaresto,examinamossielcontroldeedicinproduceNaNalconvertirloscaracteresanmeromediante
str2doubleyenesecasoponemosuncero.
functionnum_1_Callback(hObject,eventdata,handles)
num=str2double(get(hObject,'string'))
ifisnan(num)
set(hObject,'string','0')
end
Lomismohacemosparalafuncinrespuestanum_2_Callback
Grupodebotonesderadio
Vamosamodificarlacalculadoraparaquepuedarealizarlasoperacionessuma,diferencia,productoycociente.
SeleccionamosconelratnelcontrolButtonGroupylosituamosalaizquierdadelpanel,establecemossu
propiedadTagengrupoysupropiedadStringenOperaciones,establecemosen12eltamaodelaletra,enla
propiedadFontSize
Situamoscuatrobotonesderadio(RadioButton)enelinteriordelgrupodebotonesderadio(ButtonGroup).
SeleccionamosloscuatrobotonesylosalineadosverticamenteconlaherramientaAlignObjects.
http://www.sc.ehu.es/sbweb/energiasrenovables/MATLAB/gui/gui_1.html
3/9
27/11/2014
Interfazgrficodeusuario
HaciendodobleclicsobrecadaunodeloscontrolesleasignamosunnombreenlapropiedadTag,unttuloen
lapropiedadStringyuntamaodeletraenlapropiedadFontSize.
Cambiamoselnombre,Tagyttulo,Stringdelbotn,talcomovemosenlafigura
GuardamosmedianteFile/Saveelpanelyloscontrolesenelficherocalculadora_1.figyelcdigogenerado
automticamenteenelficherocalculadora_1.m
Ungrupodebotonesderadio(ButtonGroup)seutilizaparamostrarunconjuntodeopcionesmutuamente
excluyentes.Elbotnderadioactualmenteseleccionado(supropiedadTag)seguardaenlapropiedad
SelectedObjectdecontrolButtonGroup
BuscamoslafuncinrespuestabtnCalcular_CallbackalaaccinsobreelbotntituladoCalcularpulsandoenel
iconoShowfunctionsdebajodelmendelEditor,talcomosemuestraenlafigura
...
%seejecutaalpulsarelbotnbtnCalcular
http://www.sc.ehu.es/sbweb/energiasrenovables/MATLAB/gui/gui_1.html
4/9
27/11/2014
Interfazgrficodeusuario
functionbtnCalcular_Callback(hObject,eventdata,handles)
x1=str2double(get(handles.num_1,'String'))
x2=str2double(get(handles.num_2,'String'))
chk=get(handles.grupo,'SelectedObject')
switchget(chk,'Tag')
case'chkSuma',res=x1+x2
case'chkDiferencia',res=x1x2
case'chkProducto',res=x1*x2
case'chkCociente',res=x1/x2
otherwise,res=''
end
set(handles.resultado,'String',res)
...
Guardamosloscambiosrealizadosenelficherocalculadora_1.m,corremospulsandoenelbotn(flechaverde)
Run
Delmismomodoqueenelejemploanterior,paraevitarelerrorqueseproducecuandonohayacaracteres
numricosenuncontroldeedicinseinluyeelsiguientecdigoparacadaunasdelasfuncionesrespuesta
functionnum_1_Callback(hObject,eventdata,handles)
num=str2double(get(hObject,'string'))
ifisnan(num)
set(hObject,'string','0')
end
Barradedesplazamiento
Paracrearlagrficadeunaoscilacinamortiguadaescribimoselsiguientescript
g=5%constantedeamortiguamiento
w0=100%frecuenciaangularpropia
w=sqrt(w0^2g^2)%frecuenciadelaoscilacinamortiguada
x0=2%posicininicial,lavelocidadinicialesnula
t=linspace(0,0.7,400)
x=x0*exp(g*t).*(cos(w*t)+g*sin(w*t)/w)
plot(t,x,'r')
title('Oscilacionesamortiguadas')
xlabel('t')
ylabel('x')
gridon
Nuestropropsitoesdeconstruiruninterfazgrficodeusuario,paraintroduciralgunosdatos,mantenerotros
fijosyrepresentargrficamenteeldesplazamientoxenfuncindeltiempot.
Enestaseccinvamosarepresentarunaoscilacinamortiguada.Sefijalaamplitudylafaseinicial(condiciones
iniciales)lafrecuenciapropia0=100rad/sycambiamoselcoeficientedelafuerzaderozamientoproporcional
alavelocidadmedianteuncontroldedesplazamiento(Slider)yobservamoselresultadoenelcontrolgrfico
(Axes).
http://www.sc.ehu.es/sbweb/energiasrenovables/MATLAB/gui/gui_1.html
5/9
27/11/2014
Interfazgrficodeusuario
Situamoslabarradedesplazamiento(Slider)enposicinvertical,cambiamossunombreenelcdigo,Tag,a
sGamma.EstablecemoselvalorinicialenlapropiedadValuea7.Cambiamoselvalormximoenlapropiedad
Maxa10.
Situamosuncontroldetextoesttico(StaticText)enlapartesuperiordelabarra,cambiamossupropiedad
StringaRozamiento,establecemoseltamaodelafuentedetexto,FontSize,en12.
Situamosuncontroldetextoeditable(EditText)enlaparteinferiordelabarra,cambiamossupropiedadTag
atextBar,supropiedadStringa7yestablecemoselmismotamaodelafuentedetexto.
Ponemosunaventanagrfica(Axes)ycambiamossupropiedadTagagrafico.
Finalmente,situamosuncontroldetextoesttico(StaticText)sobrelapartesuperiordelcontrolgrfico,
establecemoseltamaodelafuentedetexto,FontSize,en14yelestiloennegrita,bold.
Guardamoslosficherosquesegeneranautomticamentedeextensin.figy.mconelnombrede
amortiguadas_gui.
Enprimerlugar,queremossincronizarlabarradedesplazamiento(sGamma)conelcontroldeedicinsituado
pordebajo(textBar).Acontinuacin,hacerqueaprezcaelgrficodelasoscilacionesenelcontrolquehemos
dispuestoalefecto.
1. Aldesplazareldedoenlabarradedesplazamientovacambiandoeltexto(nmero)delcontroldeedicin.
BuscamoslafuncinrespuestasGamma_Callbackalasaccionesdelusuariosobrelabarrade
desplazamientoenelficheroamortiguado_gui.mgeneradoautomticamente.Alafuncin
sGamma_CallbackselepasaelnombredelcontrolenelprimerparmetrohObject.
functionsGamma_Callback(hObject,eventdata,handles)
valor=get(hObject,'Value')
str=num2str(valor)
set(handles.textBar,'String',str)
2. Alcambiareltexto(nmero)enelcontroldeedicinypulsarRetorno,eldedoenlabarradedesplazamiento
cambiadeposicin.BuscamoslafuncinrespuestatextBar_Callbackalasaccionesdelusuariosobreelcontrol
deedicintextBarenelficheroamortiguado_gui.mgeneradoautomticamente.
functiontextBar_Callback(hObject,eventdata,handles)
valor=str2double(get(hObject,'String'))
set(handles.sGamma,'Value',valor)
3. Entercerlugar,definimosunafuncindenominadagrafica_amortiguadapararepresentargrficamentela
oscilacinamortiguadaenelcontrolgraficoylaguardamosenlamismacarpetaqueamortiguadas_gui.my
amortiguadas_gui.figgeneradasporGUIDE.
functiongrafica_amortiguada(handles)
g=get(handles.sGamma,'value')%constantedeamortiguamiento
w0=100%frecuenciaangularpropia
w=sqrt(w0^2g^2)%frecuenciadelaoscilacinamortiguada
x0=2%posicininicial,lavelocidadinicialesnula
http://www.sc.ehu.es/sbweb/energiasrenovables/MATLAB/gui/gui_1.html
6/9
27/11/2014
Interfazgrficodeusuario
t=linspace(0,0.7,400)
x=x0*exp(g*t).*(cos(w*t)+g*sin(w*t)/w)
hg=handles.grafico
plot(hg,t,x,'r')
xlabel(hg,'t')
ylabel(hg,'x')
grid(hg,'on')
end
SeobtienemediantegetelvalordelaconstantedeamortiguamientogdepropiedadValuedelabarrade
desplazamientosGamma,aunquetambinsepodraobtenerdelapropiedadStringdelcontroldeedicin
textBar.Lassentenciasgrficasdelscriptoriginalhansidomodificadas,yselepasaensuprimerparmetro
el'handle'delcontrolgrafico(Axes)
4. Delmismomodoqueenlosejemplosanteriores,cuandoseintroducencaracteresnonumricosenelcontrolde
edicin,cuandoelnmeroquehemosintroducidoesnegativoomayorque10,entoncessesustituyeporun
valorpordefecto,ennuestrocasocero.
functiontextBar_Callback(hObject,eventdata,handles)
valor=str2double(get(hObject,'String'))
if(isnan(valor)||valor<0||valor>10)
set(handles.sGamma,'Value',0)
set(hObject,'string','0')
else
set(handles.sGamma,'Value',valor)
end
Sellamaalafuncingrafica_amortiguadacuandosecrealaventanagrfica,cuandosemuevelabarrade
desplazamientoycuandosecambiaelnmeroenelcontroldeedicin.Elficheromodificado
amortiguadas_gui.mquedacomosigue(ennegritaelcdigoquesehaaadido,sehansuprimidolamayorparte
deloscomentarios)
functionvarargout=amortiguado_gui(varargin)
%BegininitializationcodeDONOTEDIT
gui_Singleton=1
gui_State=struct('gui_Name',mfilename,...
'gui_Singleton',gui_Singleton,...
'gui_OpeningFcn',@amortiguado_gui_OpeningFcn,...
'gui_OutputFcn',@amortiguado_gui_OutputFcn,...
'gui_LayoutFcn',[],...
'gui_Callback',[])
ifnargin&&ischar(varargin{1})
gui_State.gui_Callback=str2func(varargin{1})
end
ifnargout
[varargout{1:nargout}]=gui_mainfcn(gui_State,varargin{:})
else
gui_mainfcn(gui_State,varargin{:})
end
%EndinitializationcodeDONOTEDIT
%Executesjustbeforeamortiguado_guiismadevisible.
functionamortiguado_gui_OpeningFcn(hObject,eventdata,handles,varargin)
handles.output=hObject
guidata(hObject,handles)
grafica_amortiguada(handles)
%Outputsfromthisfunctionarereturnedtothecommandline.
functionvarargout=amortiguado_gui_OutputFcn(hObject,eventdata,handles)
varargout{1}=handles.output
%Executesonslidermovement.
functionsGamma_Callback(hObject,eventdata,handles)
valor=get(hObject,'Value')
str=num2str(valor)
set(handles.textBar,'String',str)
grafica_amortiguada(handles)
%Executesduringobjectcreation,aftersettingallproperties.
functionsGamma_CreateFcn(hObject,eventdata,handles)
ifisequal(get(hObject,'BackgroundColor'),get(0,'defaultUicontrolBackgroundColor'))
set(hObject,'BackgroundColor',[.9.9.9])
end
functiontextBar_Callback(hObject,eventdata,handles)
valor=str2double(get(hObject,'String'))
if(isnan(valor)||valor<0||valor>10)
set(handles.sGamma,'Value',0)
set(hObject,'string','0')
http://www.sc.ehu.es/sbweb/energiasrenovables/MATLAB/gui/gui_1.html
7/9
27/11/2014
Interfazgrficodeusuario
else
set(handles.sGamma,'Value',valor)
end
grafica_amortiguada(handles)
%Executesduringobjectcreation,aftersettingallproperties.
functiontextBar_CreateFcn(hObject,eventdata,handles)
ifispc&&isequal(get(hObject,'BackgroundColor'),...
get(0,'defaultUicontrolBackgroundColor'))
set(hObject,'BackgroundColor','white')
end
Comohemosvistocadavezquesemodificaelvalordeg(rozamiento)enlabarradedesplazamiento,sedibuja
unanuevagrficaenlaelcontrolgrfico.CuandoelsistemaqueseanalizaescomplejoyaMATLABlelleva
tiemporealizarlosclculosparamostrarelgrfico,estaformadeprocedernoeslamsadecuada.
Sesueleaadirunbotnalinterfazgrfico,demodoqueseestablecenlosvaloresdelosparmetros(g)enlos
controlesyalpulsarelbotnsedibujaunnuevogrfico.Esdecir,sedibujaelgrficocuandoseinicialaventana
yseejecutalafuncin..._OpeningFcntomandolosvaloresquesehanestablecidoparalosparetrosenlos
controlespordefecto.Posteriormente,semodificanlosvaloresdelosparmetrosenloscontrolesysepulsael
botn.Enrespuestaalaaccindelusuariosobreunbotn..._Callbacksedibujaelnuevogrfico.
SesugiereallectorqueaadaunbotntituladoGrficaconunapropiedadTagdenominadobtnGrafica.
Modifiqueelcdigogeneradoautomticamentedelsiguientemodo
%Seejecutajustoantesdequelaventanaseavisible
functionamortiguado_gui_OpeningFcn(hObject,eventdata,handles,varargin)
handles.output=hObject
guidata(hObject,handles)
grafica_amortiguada(handles)
%SeejecutaalpulsarelbotnbtnGrafica
functionbtnGrafica_Callback(hObject,eventdata,handles)
grafica_amortiguada(handles)
%seejecutaalmoverlabarradedesplazamientosGamma
functionsGamma_Callback(hObject,eventdata,handles)
valor=get(hObject,'Value')
str=num2str(valor)
set(handles.textBar,'String',str)
%SeejecutaalpulsarRetornoenelcontroldeedicintextBar
functiontextBar_Callback(hObject,eventdata,handles)
valor=str2double(get(hObject,'String'))
if(isnan(valor)||valor<0||valor>10)
set(handles.sGamma,'Value',0)
set(hObject,'string','0')
else
set(handles.sGamma,'Value',valor)
end
http://www.sc.ehu.es/sbweb/energiasrenovables/MATLAB/gui/gui_1.html
8/9
27/11/2014
Interfazgrficodeusuario
EnergasRenovablesEUITIdeEibar
http://www.sc.ehu.es/sbweb/energiasrenovables/MATLAB/gui/gui_1.html
9/9