Matlab - Error con GUI

   
Vista:

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
Valora esta pregunta
Me gusta: Está pregunta es útil y esta claraNo me gusta: Está pregunta no esta clara o no es útil
0
Responder
Imágen de perfil de JOSE JEREMIAS CABALLERO

Error con GUI

Publicado por JOSE JEREMIAS CABALLERO jjcc94@hotmail.com (3432 intervenciones) el 04/06/2011 06:10:52
HOla LUis.
HIce unos cambios a tu programa. Adema lo he mejorado.
Ejecutalo y lo veras.

%=======================================================
function varargout = Directividad(varargin)
gui_Singleton = 1;
gui_State = struct('gui_Name', mfilename, ...
'gui_Singleton', gui_Singleton, ...
'gui_OpeningFcn', @Directividad_OpeningFcn, ...
'gui_OutputFcn', @Directividad_OutputFcn, ...
'gui_LayoutFcn', [] , ...
'gui_Callback', []);
if nargin && ischar(varargin{1})
gui_State.gui_Callback = str2func(varargin{1});
end
if nargout
[varargout{1:nargout}] = gui_mainfcn(gui_State, varargin{:});
else
gui_mainfcn(gui_State, varargin{:});
end

function Directividad_OpeningFcn(hObject, eventdata, handles, varargin)
handles.output = hObject;
guidata(hObject, handles);

function varargout = Directividad_OutputFcn(hObject, eventdata, handles)
varargout{1} = handles.output;
function edit_a_Callback(hObject, eventdata, handles)
function edit_a_CreateFcn(hObject, eventdata, handles)
if ispc && isequal(get(hObject,'BackgroundColor'),...
get(0,'defaultUicontrolBackgroundColor'))
set(hObject,'BackgroundColor','white');
end

function edit_b1_Callback(hObject, eventdata,handles)
function edit_b1_CreateFcn(hObject, eventdata, handles)
if ispc && isequal(get(hObject,'BackgroundColor'),...
get(0,'defaultUicontrolBackgroundColor'))
set(hObject,'BackgroundColor','white');
end

function edit_p1_Callback(hObject, eventdata, handles)
function edit_p1_CreateFcn(hObject, eventdata, handles)
if ispc && isequal(get(hObject,'BackgroundColor'),...
get(0,'defaultUicontrolBackgroundColor'))
set(hObject,'BackgroundColor','white');
end

function PLOT_Callback(hObject, eventdata, handles)
global SELECCION;
if SELECCION==1
b1=str2double(get(handles.edit_b1 ,'String'));
p1=str2double(get(handles.edit_p1 ,'String'));
mx=str2double(get(handles.mx,'String'));
mx=handles.mx;
a=linspace(0,mx,1000);
termino_Fresnel=b1./(sqrt(2*p1));
C=mfun('FresnelC',termino_Fresnel);
S=mfun('FresnelS',termino_Fresnel);
directividad=((64.*a.*p1)./(pi.*b1)).*(C.^2+S.^2);
axes(handles.axes1);
handles.x=a;
handles.h=plot(a,directividad);
end

if SELECCION==2
a=str2double(get(handles.edit_a ,'String'));
p1=str2double(get(handles.edit_p1 ,'String'));
mx=str2double(get(handles.mx,'String'));
b1=linspace(0,mx,1000);
termino_Fresnel=b1./(sqrt(2*p1));
C=mfun('FresnelC',termino_Fresnel);
S=mfun('FresnelS',termino_Fresnel);
directividad=((64.*a.*p1)./(pi.*b1)).*(C.^2+S.^2);
axes(handles.axes1);
handles.x=b1;
handles.h=plot(b1,directividad);
end

if SELECCION==3
a=str2double(get(handles.edit_a ,'String'));
b1=str2double(get(handles.edit_b1 ,'String'));
mx=str2double(get(handles.mx,'String'));
p1=linspace(0,mx,1000);
termino_Fresnel=b1./(sqrt(2*p1));
C=mfun('FresnelC',termino_Fresnel);
S=mfun('FresnelS',termino_Fresnel);
directividad=((64.*a.*p1)./(pi.*b1)).*(C.^2+S.^2);
axes(handles.axes1);
handles.x=p1;
handles.h=plot(p1,directividad);
end


function mx_Callback(hObject, eventdata, handles)
function mx_CreateFcn(hObject, eventdata, handles)
if ispc && isequal(get(hObject,'BackgroundColor'), ...
get(0,'defaultUicontrolBackgroundColor'))
set(hObject,'BackgroundColor','white');
end




function Eje_abscisas_SelectionChangeFcn(hObject, eventdata, handles)
%Función que implementa los radio_buttons, la idea es que cuando selecciono
%un radio_button desaparezca el edit_text del parámetro del radio button
%seleccionado, en la primera ejecución todo va bien pero despues del primer
%calculo y representacion en la gráfica da error
set([handles.edit_b1 handles.edit_a handles.edit_p1 handles.text1 handles.text2 handles.text3],'Visible','on');
global SELECCION;
switch get(eventdata.NewValue,'Tag')
case 'button_a'
plot(0,0)
set(handles.edit_a,'Visible','off','string','');
set(handles.edit_b1,'Visible','off','string','');
set(handles.edit_b1,'Visible','on','string','');
set(handles.edit_p1,'Visible','off','string','');
set(handles.edit_p1,'Visible','on','string','');
set(handles.text1,'Visible','off');
set(handles.mx,'Visible','off','string','');
set(handles.mx,'Visible','on','string','');
SELECCION=1;

case 'button_b1'
plot(0,0)
set(handles.edit_b1,'Visible','off','string','');
set(handles.text2,'Visible','off');
set(handles.edit_a,'Visible','off','string','');
set(handles.edit_a,'Visible','on','string','');
set(handles.edit_p1,'Visible','off','string','');
set(handles.edit_p1,'Visible','on','string','');
set(handles.mx,'Visible','off','string','');
set(handles.mx,'Visible','on','string','');
SELECCION=2;

case 'button_p1'
plot(0,0)
set(handles.edit_b1,'Visible','off','string','');
set(handles.edit_b1,'Visible','on','string','');
set(handles.edit_a,'Visible','off','string','');
set(handles.edit_a,'Visible','on','string','');
set(handles.edit_p1,'Visible','off','string','');
set(handles.mx,'Visible','off','string','');
set(handles.mx,'Visible','on','string','');
set(handles.text3,'Visible','off');
SELECCION=3;
end
%=======================================================



Saludos.
JOSE JEREMIAS CABALLERO
ASESOR DE PROYECTOS CON MATLAB
PROFESOR DE METODOS NUMERICOS CON MATLAB
PROGRAMADOR EN MATLAB
jjcc94@hotmail.com
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar

Error con GUI

Publicado por Luis Manuel (21 intervenciones) el 04/06/2011 06:44:19
Muchas gracias, la verdad es que no se que podria haber hecho sin su ayuda, nadie hasta ahora me sabia dar una solucion. Gracias de nuevo.
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar
Imágen de perfil de JOSE JEREMIAS CABALLERO

Error con GUI

Publicado por JOSE JEREMIAS CABALLERO jjcc94@hotmail.com (3432 intervenciones) el 07/06/2011 02:45:32
Ok Luis.

Entonces tu pregunta FUE RESUELTA.

Saludos.
JOSE JEREMIAS CABALLERO
ASESOR DE PROYECTOS CON MATLAB
PROFESOR DE METODOS NUMERICOS CON MATLAB
PROGRAMADOR EN MATLAB
jjcc94@hotmail.com
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar

Error con GUI

Publicado por Carolina (1 intervención) el 17/09/2011 02:26:31
Hola, pues soy nueva en esto de la GUI y de hecho no se usar muy bien las instrucciones de MATLAB, seguramente por eso tengo errores. Mi interfaz es para un rectificador de media onda con carga RL y opcion para carga RC (no está en uso en el código), al correrlo me sacó estos errores:

Unhandled internal error in guidefunc:
Error using ==>feval
Error: <a
href="error:C:\Users\Kroo\Desktop\Uni\Potencia\RectificadoresMediaOnda.m,43,0,20">File:RectificadoresMediaOnda.m Line:430 Column:20</a>
Unbalanced or unexpected parenthesis or bracket
Error in==>guidefun>layoutActivate at 833
Error in==>guidefunc at 15


En la línea 833 dice feval(fcn);
En la línea 15 hay un case 'activateFigure'
varargout = layoutActivate(varargin{:});
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar
Imágen de perfil de JOSE JEREMIAS CABALLERO

Error con GUI

Publicado por JOSE JEREMIAS CABALLERO jjcc94@hotmail.com (3432 intervenciones) el 17/09/2011 17:11:00
hola Carolina.
Cuando dices que eres nueva en guide, estas diciendo que ya conoces matlab a nivel basico, e intermedio.
Si tu respuesta es afirmativa, entonces hazlo a nivel intermedio tu programa y luego pegas al foro tu programa y alli te puedo ayudar con mas certeza. Por la forma que como estas preguntando es dificil responderte con certeza tu pregunta.

Si tu respuesta no es afirmativa, entonces estudia matlab basico e matlab intermedio.

Ademas debes pegar todo lo que esta en guide, para poder ver con mas amplitud tu programa y poder darte un diagnostico concreto.

Saludos.
JOSE JEREMIAS CABALLERO
ASESOR DE PROYECTOS CON MATLAB
PROFESOR DE METODOS NUMERICOS CON MATLAB
PROGRAMADOR EN MATLAB
jjcc94@hotmail.com
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar

Error con GUI

Publicado por angei angyber@hotmail.com (1 intervención) el 27/02/2014 23:07:34
Hola

Me pueden ayudar a crear un aviso de error en gui Matlab, estoy utilizando un pusbutton que es con el que inicio mi programa siempre y cuando en el edit Text escribas un número el programa del edt text es:

function edit8_Callback(hObject, eventdata, handles)
% Hints: get(hObject,'String') returns contents of edit8 as text
% str2double(get(hObject,'String')) returns contents of edit8 as a double
global Fm;
global mf;
mf=str2double(get(hObject,'string')); %indice de frecuencia
Fm=50

Entonces lo que quiero es que cuando escriba una letra o algo que no sea un número me envié un mensaje de error al activar el pushbutton que es el que corre el programa y su callback del pushbutton es:

set_param(gcs,'simulationCommand','Start');
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar

Error con GUI

Publicado por jean94 (1 intervención) el 03/02/2016 01:20:05
Hola estoy haciendo un guide y puse un popumenu lo que quiero es que cuando presione una opcion me desaparezcan los edit text pero me sale este error ayuda por favor gracias.

1
2
3
4
5
6
7
8
9
function popupmenu1_Callback(hObject, eventdata, handles)
p=get(hObject,'Value');
switch p
    case 1
        set(handles,mthree,'Visible','off','String','');
        set(handles,mfour,'Visible','off','String','');
        set(handles,mfive,'Visible','off','String','');
        set(handles,msix,'Visible','off','String','');
end

este es el error
Undefined function or variable 'mthree'.

Error in sistema_ec>popupmenu1_Callback (line 90)
set(handles,mthree,'Visible','off','String','');

Error in gui_mainfcn (line 95)
feval(varargin{:});

Error in sistema_ec (line 42)
gui_mainfcn(gui_State, varargin{:});

Error in @(hObject,eventdata)sistema_ec('popupmenu1_Callback',hObject,eventdata,guidata(hObject))


Error while evaluating uicontrol Callback
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar