Error con GUI
Publicado por Luis (21 intervenciones) el 03/06/2011 08:04:15
Estoy intentando hacer una GUI en donde tengo un button group con tres ratio button dentro y debajo tres edit text. Tengo tambien un push button, un axes y otro edit text debajo.
De forma simplificada, cuando selecciono un ratio button concreto, debe desaparecer debajo un edit text concreto, entonces ingreso un valor en los otros 2 edit text, le doy al push button y represento una gráfica con una función que he calculado con esos valores.
El error viene despues de ese primer calculo al intentar cambiar de ratio button, en teoria deberia aparecer el edit text invisible y desaparecer otro, pero no lo hace, da un error que no sé solucionar.
Creo que el error debe estar en alguna de esas dos funciones:
La función que implementa el button group es esta:
function Eje_abscisas_SelectionChangeFcn(hObject, eventdata, handles)
set([handles.edit_b1 handles.edit_a handles.edit_p1 handles.text1 handles.text2 handles.text3],'Visible','on'); %Pongo en modo visible todos los edit text y static text
global SELECCION; %variable global que usaré en el callback del pushbutton para saber que ratiobutton está pulsado
switch get(eventdata.NewValue,'Tag') %condición para hacer desaparecer el edit text y el %static text en función del ratio button pulsado
case 'button_a' %si he pulsado el ratio button "button_a"
set(handles.edit_a,'Visible','off'); %hago desaparecer el edit text "edit_a"
set(handles.text1,'Visible','off'); %tambien hago desaparecer el static text que tiene al %lado "text1"
SELECCION=1; %la variable global tiene el valor 1, este valor lo usare luego en la función del pushbutton
case 'button_b1' %si he pulsado el ratio button "button_b1"
set(handles.edit_b1,'Visible','off'); %hago desaparecer el edit text "edit_b1"
set(handles.text2,'Visible','off'); %tambien hago desaparecer el static text que tiene al %lado "text2"
SELECCION=2; %la variable global tiene el valor 1,este valor lo usare luego en la función del pushbutton
case 'button_p1' %si he pulsado el ratio button "button_p1"
set(handles.edit_p1,'Visible','off'); %hago desaparecer el edit text "edit_p1"
set(handles.text3,'Visible','off'); %tambien hago desaparecer el static text que tiene al %lado "text3"
SELECCION=3; %la variable global tiene el valor 3,este valor lo usare luego en la %función del pushbutton
end %Fin del bucle
La función del pushbutton, es decir, del boton PLOT es esta:
function PLOT_Callback(hObject, eventdata, handles)
global SELECCION; %Variable global que usé antes en la función de arriba, la del button %group, tendrá el valor 1,2 o 3 en función de que ratiobutton esté seleccionado
if SELECCION == 1 %Si la variable global tiene el valor 1, es que está seleccionado el ratio %button "button_a"
p1=handles.edit_p1; %Meto en la variable p1 el valor que he escrito en el edit text "edit_p1"
b1=handles.edit_b1; %Meto en la variable b1 el valor que he escrito en el edit text "mx"
mx = handles.mx; %Meto en la variable mx el valor que he escrito en el edit text "mx" (la %casilla que está debajo de la gráfica)
a = linspace(0,mx,1000); %está seleccionado el ratio button "button a" por lo que quiero %representar mi función en abscisas en función del parámetro a, creo un vector que va desde 0 %hasta el valor mx con un total de 1000 puntos entre esos 2 valores
termino_Fresnel = b1./(sqrt(2*p1)); %Calculo un termino que despues integraré de forma especial
C = mfun('FresnelC',termino_Fresnel); %Integro el termino de arriba con la integral de %Fresnel del coseno
S = mfun('FresnelS',termino_Fresnel); %Ahora integro el mismo termino con la integral de %Fresnel del seno
directividad = ((64.*a.*p1)./(pi.*b1)).*(C.^2+S.^2); %Calculo mi función que voy a %representar en función del vector a, con valores concretos de p1 y b1
axes(handles.axes1); %Asignación del campo axes para la función a graficar
handles.x=a; %En el eje de abscisas irá el vector a
handles.h=plot(a,directividad); %Represento en la gráfica en el eje de abscisas a y en el %eje de ordenadas directividad
elseif SELECCION == 2 %Si la variable global tiene el valor 2, es que está seleccionado el %ratio button "button_b1"
p1=handles.edit_p1; %Meto en la variable p1 el valor que he escrito en el edit text "mx"
mx=handles.mx; %Meto en la variable mx el valor que he escrito en el edit text "edit_p1"
a=handles.edit_a; %Meto en la variable a el valor que he escrito en el edit text "edit_a"
b1 = linspace(0,mx,1000); %está seleccionado el ratio button "button_b1" por lo que quiero %representar mi función en abscisas en función del parámetro b1, creo un vector que va desde 0 %hasta el valor mx con un total de 1000 puntos entre esos 2 valores
termino_Fresnel = b1./(sqrt(2*p1)); %Calculo un termino que despues integraré de forma especial
C = mfun('FresnelC',termino_Fresnel); %Integro el termino de arriba con la integral de %Fresnel del coseno
S = mfun('FresnelS',termino_Fresnel); %Ahora integro el mismo termino con la integral de %Fresnel del seno
directividad = ((64.*a.*p1)./(pi.*b1)).*(C.^2+S.^2); %Calculo mi función que voy a %representar en función del vector b1, con valores concretos de p1 y a
axes(handles.axes1); %Asignación del campo axes para la función a graficar
handles.x=b1; %En el eje de abscisas irá el vector a
handles.h=plot(b1,directividad); %Represento en la gráfica en el eje de abscisas a y en el %eje de ordenadas directividad
elseif SELECCION == 3 %Si la variable global tiene el valor 3, es que está seleccionado el %ratio button "button_p1"
mx=handles.mx; %Meto en la variable mx el valor que he escrito en el edit text "mx"
p1=linspace(0,mx,1000);%está seleccionado el ratio button "button_p1" por lo que quiero %representar mi función en abscisas en función del parámetro p1, creo un vector que va desde %0 hasta el valor mx con un total de 1000 puntos entre esos 2 valores
a=handles.edit_a; %Meto en la variable a el valor que he escrito en el edit text "edit_a"
b1 = handles.edit_b1; %Meto en la variable a el valor que he escrito en el edit text "edit_b1"
termino_Fresnel = b1./(sqrt(2*p1)); %Calculo un termino que despues integraré de forma %especial
C = mfun('FresnelC',termino_Fresnel); %Integro el termino de arriba con la integral de %Fresnel del coseno
S = mfun('FresnelS',termino_Fresnel); %Ahora integro el mismo termino con la integral de %Fresnel del seno
directividad = ((64.*a.*p1)./(pi.*b1)).*(C.^2+S.^2); %Calculo mi función que voy a %representar en función del vector p1, con valores concretos de b1 y a
axes(handles.axes1); %Asignación del campo axes para la función a graficar
handles.x=p1; %En el eje de abscisas irá el vector p1
handles.h=plot(p1,directividad); %Represento en la gráfica en el eje de abscisas p1 y en el %eje de ordenadas directividad
end %Fin del bucle
El error que me da es el siguiente:
??? Error using ==> set
Invalid handle
Error in ==>
Directividad>Eje_abscisas_SelectionChangeFcn
at 177
set([handles.edit_b1 handles.edit_a
handles.edit_p1 handles.text1
handles.text2
handles.text3],'Visible','on');
Error in ==> gui_mainfcn at 96
feval(varargin{:});
Error in ==> Directividad at 17
gui_mainfcn(gui_State, varargin{:});
Error in ==>
@(hObject,eventdata)Directividad('Eje_abscisas_SelectionChangeFcn',get(hObject,'SelectedObject'),eventdata,guidata(get(hObject,'SelectedObject')))
Error in ==> hgfeval at 63
feval(fcn{1},varargin{:},fcn{2:end});
Error in ==>
uitools.uibuttongroup.childAddedCbk>manageButtons
at 80
hgfeval(cbk, source, evdata);
??? Error while evaluating uicontrol Callback
He colgado los ficheros por si los quieren mirar y ejecutar, el enlace donde estan subidos es:
http://www.mediafire.com/?6h947xorewdhaci
Estaría muy agradecido si alguien me pudiese hechar una mano, llevo con esto parado varios dias y es importante para mí.
Gracias por adelantado,
Luis
De forma simplificada, cuando selecciono un ratio button concreto, debe desaparecer debajo un edit text concreto, entonces ingreso un valor en los otros 2 edit text, le doy al push button y represento una gráfica con una función que he calculado con esos valores.
El error viene despues de ese primer calculo al intentar cambiar de ratio button, en teoria deberia aparecer el edit text invisible y desaparecer otro, pero no lo hace, da un error que no sé solucionar.
Creo que el error debe estar en alguna de esas dos funciones:
La función que implementa el button group es esta:
function Eje_abscisas_SelectionChangeFcn(hObject, eventdata, handles)
set([handles.edit_b1 handles.edit_a handles.edit_p1 handles.text1 handles.text2 handles.text3],'Visible','on'); %Pongo en modo visible todos los edit text y static text
global SELECCION; %variable global que usaré en el callback del pushbutton para saber que ratiobutton está pulsado
switch get(eventdata.NewValue,'Tag') %condición para hacer desaparecer el edit text y el %static text en función del ratio button pulsado
case 'button_a' %si he pulsado el ratio button "button_a"
set(handles.edit_a,'Visible','off'); %hago desaparecer el edit text "edit_a"
set(handles.text1,'Visible','off'); %tambien hago desaparecer el static text que tiene al %lado "text1"
SELECCION=1; %la variable global tiene el valor 1, este valor lo usare luego en la función del pushbutton
case 'button_b1' %si he pulsado el ratio button "button_b1"
set(handles.edit_b1,'Visible','off'); %hago desaparecer el edit text "edit_b1"
set(handles.text2,'Visible','off'); %tambien hago desaparecer el static text que tiene al %lado "text2"
SELECCION=2; %la variable global tiene el valor 1,este valor lo usare luego en la función del pushbutton
case 'button_p1' %si he pulsado el ratio button "button_p1"
set(handles.edit_p1,'Visible','off'); %hago desaparecer el edit text "edit_p1"
set(handles.text3,'Visible','off'); %tambien hago desaparecer el static text que tiene al %lado "text3"
SELECCION=3; %la variable global tiene el valor 3,este valor lo usare luego en la %función del pushbutton
end %Fin del bucle
La función del pushbutton, es decir, del boton PLOT es esta:
function PLOT_Callback(hObject, eventdata, handles)
global SELECCION; %Variable global que usé antes en la función de arriba, la del button %group, tendrá el valor 1,2 o 3 en función de que ratiobutton esté seleccionado
if SELECCION == 1 %Si la variable global tiene el valor 1, es que está seleccionado el ratio %button "button_a"
p1=handles.edit_p1; %Meto en la variable p1 el valor que he escrito en el edit text "edit_p1"
b1=handles.edit_b1; %Meto en la variable b1 el valor que he escrito en el edit text "mx"
mx = handles.mx; %Meto en la variable mx el valor que he escrito en el edit text "mx" (la %casilla que está debajo de la gráfica)
a = linspace(0,mx,1000); %está seleccionado el ratio button "button a" por lo que quiero %representar mi función en abscisas en función del parámetro a, creo un vector que va desde 0 %hasta el valor mx con un total de 1000 puntos entre esos 2 valores
termino_Fresnel = b1./(sqrt(2*p1)); %Calculo un termino que despues integraré de forma especial
C = mfun('FresnelC',termino_Fresnel); %Integro el termino de arriba con la integral de %Fresnel del coseno
S = mfun('FresnelS',termino_Fresnel); %Ahora integro el mismo termino con la integral de %Fresnel del seno
directividad = ((64.*a.*p1)./(pi.*b1)).*(C.^2+S.^2); %Calculo mi función que voy a %representar en función del vector a, con valores concretos de p1 y b1
axes(handles.axes1); %Asignación del campo axes para la función a graficar
handles.x=a; %En el eje de abscisas irá el vector a
handles.h=plot(a,directividad); %Represento en la gráfica en el eje de abscisas a y en el %eje de ordenadas directividad
elseif SELECCION == 2 %Si la variable global tiene el valor 2, es que está seleccionado el %ratio button "button_b1"
p1=handles.edit_p1; %Meto en la variable p1 el valor que he escrito en el edit text "mx"
mx=handles.mx; %Meto en la variable mx el valor que he escrito en el edit text "edit_p1"
a=handles.edit_a; %Meto en la variable a el valor que he escrito en el edit text "edit_a"
b1 = linspace(0,mx,1000); %está seleccionado el ratio button "button_b1" por lo que quiero %representar mi función en abscisas en función del parámetro b1, creo un vector que va desde 0 %hasta el valor mx con un total de 1000 puntos entre esos 2 valores
termino_Fresnel = b1./(sqrt(2*p1)); %Calculo un termino que despues integraré de forma especial
C = mfun('FresnelC',termino_Fresnel); %Integro el termino de arriba con la integral de %Fresnel del coseno
S = mfun('FresnelS',termino_Fresnel); %Ahora integro el mismo termino con la integral de %Fresnel del seno
directividad = ((64.*a.*p1)./(pi.*b1)).*(C.^2+S.^2); %Calculo mi función que voy a %representar en función del vector b1, con valores concretos de p1 y a
axes(handles.axes1); %Asignación del campo axes para la función a graficar
handles.x=b1; %En el eje de abscisas irá el vector a
handles.h=plot(b1,directividad); %Represento en la gráfica en el eje de abscisas a y en el %eje de ordenadas directividad
elseif SELECCION == 3 %Si la variable global tiene el valor 3, es que está seleccionado el %ratio button "button_p1"
mx=handles.mx; %Meto en la variable mx el valor que he escrito en el edit text "mx"
p1=linspace(0,mx,1000);%está seleccionado el ratio button "button_p1" por lo que quiero %representar mi función en abscisas en función del parámetro p1, creo un vector que va desde %0 hasta el valor mx con un total de 1000 puntos entre esos 2 valores
a=handles.edit_a; %Meto en la variable a el valor que he escrito en el edit text "edit_a"
b1 = handles.edit_b1; %Meto en la variable a el valor que he escrito en el edit text "edit_b1"
termino_Fresnel = b1./(sqrt(2*p1)); %Calculo un termino que despues integraré de forma %especial
C = mfun('FresnelC',termino_Fresnel); %Integro el termino de arriba con la integral de %Fresnel del coseno
S = mfun('FresnelS',termino_Fresnel); %Ahora integro el mismo termino con la integral de %Fresnel del seno
directividad = ((64.*a.*p1)./(pi.*b1)).*(C.^2+S.^2); %Calculo mi función que voy a %representar en función del vector p1, con valores concretos de b1 y a
axes(handles.axes1); %Asignación del campo axes para la función a graficar
handles.x=p1; %En el eje de abscisas irá el vector p1
handles.h=plot(p1,directividad); %Represento en la gráfica en el eje de abscisas p1 y en el %eje de ordenadas directividad
end %Fin del bucle
El error que me da es el siguiente:
??? Error using ==> set
Invalid handle
Error in ==>
Directividad>Eje_abscisas_SelectionChangeFcn
at 177
set([handles.edit_b1 handles.edit_a
handles.edit_p1 handles.text1
handles.text2
handles.text3],'Visible','on');
Error in ==> gui_mainfcn at 96
feval(varargin{:});
Error in ==> Directividad at 17
gui_mainfcn(gui_State, varargin{:});
Error in ==>
@(hObject,eventdata)Directividad('Eje_abscisas_SelectionChangeFcn',get(hObject,'SelectedObject'),eventdata,guidata(get(hObject,'SelectedObject')))
Error in ==> hgfeval at 63
feval(fcn{1},varargin{:},fcn{2:end});
Error in ==>
uitools.uibuttongroup.childAddedCbk>manageButtons
at 80
hgfeval(cbk, source, evdata);
??? Error while evaluating uicontrol Callback
He colgado los ficheros por si los quieren mirar y ejecutar, el enlace donde estan subidos es:
http://www.mediafire.com/?6h947xorewdhaci
Estaría muy agradecido si alguien me pudiese hechar una mano, llevo con esto parado varios dias y es importante para mí.
Gracias por adelantado,
Luis
Valora esta pregunta


0