Sie sind auf Seite 1von 9

27/11/2014

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

Das könnte Ihnen auch gefallen