Matlab - Mostrar Variable Global de una GUI en el workspace

 
Vista:

Mostrar Variable Global de una GUI en el workspace

Publicado por Batman (15 intervenciones) el 28/03/2008 17:48:01
Hola

Estoy haciendo el proyecto con Matlab y necessito que una variable global, en la que almaceno objetos, me aparezca en el workspace del Matlab.

La variable global la he declarado en el codigo de la GUI, es mas, cuando inserto datos y llamo a un metodo para visualizar los datos insertados, me los muestra en el command window, pero no consigo que aparezca la variable que contiene a los datos en el workspace.

Pero si pongo es linea:

uicontrol('style', 'pushbutton', 'CallBack','global ... MY_NODOS,disp(MY_NODOS),MY_NODOS = verticeNodo()','string','NODOS');

Me aparece un boton que al pulsarlo si me crea la la variable "MY_NODOS". Necesito 3 variables de este tipo, pero si pongo 3 lineas con el mismo codigo pero cambiando el nombre de la variable, sólo me aparece el boton referido a la última variable que escribí. (No se si esto último se entiende bien).

A ver si alguien me puede decir algo estoy harto la ayuda y no encuentro nada.

Gracias por todo.
Si alguien quiere puedo poner el codigo, pero es un poco largo, asi que espero a que alguien me lo pida y entonces lo pongo.

Muchas gracias
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

RE:Mostrar Variable Global de una GUI en el worksp

Publicado por puma (30 intervenciones) el 01/04/2008 01:47:33
hola,

No me queda claro si estas usando el GUIDE o bien funciones de la libreria uitools para crear tus GUIs.
Si es el segundo caso, (que yo asumo que si porque veo que creas tus controles con el comando uicontrol), supongo tambien que todo este codigo de creacion de tu GUI lo tienes en un archivo M, cuando ejecutas este archivo automaticamente todas tus variables incluyendo las globales son visibles en el workspace (cosa que no pasa con el GUIDE), no necesitas hacer nada para que sean visibles en tu workspace.

y con respecto a que solo te aparece el ultimo boton que creaste es porque no manipulaste la propiedad 'position' de tus botones, asi que siempre que los creas te los pone en la misma posicion y se van encimando, asi que por eso solo ves el ultimo. Eso es visualmente.
Ahora bien siempre que hagas controles con uicontrol siempre debes guardar su handle (identificador) del objeto que estas creando, asi que deberias poner:

hboton1 = uicontrol('style', 'pushbutton', 'CallBack', 'boton1call', ...);
hboton2 = uicontrol('style', 'pushbutton', 'CallBack', 'boton2call', ...);
etc

De esta forma cuando quieras saber alguna propiedad o quieras modificar te refieres a tus objetos por medio de sus identificadores

Otra cosa, NO coloques despues de la propiedad 'callback' directamente el codigo que quieres que se ejecute, una mejor manera es como te puse en el ejemplo de arriba. Si notas en la propiedad callback le estoy colocando el texto "boton1call", lo que tienes que hacer despues es simplemente hacer un archivo M llamado "boton1call.m" con todo el codigo que quieres que ejecute el callback. Es una mejor manera de hacerlo :)

Saludos
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

RE:Mostrar Variable Global de una GUI en el worksp

Publicado por Batman (15 intervenciones) el 01/04/2008 21:16:46
Hola Puma. Soy Batman (de Foros Matlab)

Me he tomado la libertad de escribirte al correo con lo que me comentas.

Veras estoy usando el GUIDE, la libreria uitools no la estoy usando, he mirado algo, pero me parece que es más complicado de usar que usar el GUIDE.
Al hacerlo con el GUIDE, las variables no son visibles en el workspace, como tu me dices.

Sabes de algún manual para programar con el uitools? Yo estoy usando un manual para usar el GUIDE, de "Diego Barragan" la verdad que muy bueno.

Mi gran problema esta en poder controlar las variables en el workspace, y el trozo que he programado con la libreria uicontrol:

uicontrol('style', 'pushbutton', 'CallBack','global ... MY_NODOS,disp(MY_NODOS),MY_NODOS = verticeNodo()','string','NODOS');

Lo vi en la ayuda de Matlab, lo copié y vi que podía controlar la variable global.
El guide te genera el archivo *.m

Yo necesito 4 variables globales: MY_NODOS, MY_ARISTAS, MY_SERVICIOS, y MY_GRAFO.
Tengo que crear un grafo con nodos, aristas y servicios.
Ya tengo las clases creadas (clase Nodo, clase Arista y clase Servicio y clase Grafo) y funcionan

Hire llamando a los metodos segun los necesite, segun el boton que pulse.

¿Me puedes dar algun ejemplo en el que uses la propiedad del position para colocar los botones?

Otra cosa, ¿Pporque, siempre que use controles uicontrol, he de guardar su handle? Para que me puede servir luego el identificador?

¿Puedes luego acceder al identificador en el command window?

Con respecto a lo de crear una funcion aparte (boton1 call) con el codigo de la variable, lo he intentado, pero no consigo que me saque el valor de la variable global MY_NODOS o MY_ARISTA por el workspace y que luego la variable almacene los datos de los Nodos.

Muchas gracias por haberme respondido.

Si puedes solucionarme estos problemillas te lo agradecería muuuccho.

Muchas gracias por todo y un saludo.

Batman

([email protected])

"ESto me lo escribiste tu"

No me queda claro si estas usando el GUIDE o bien funciones de la libreria uitools para crear tus GUIs.
Si es el segundo caso, (que yo asumo que si porque veo que creas tus controles con el comando uicontrol), supongo tambien que todo este codigo de creacion de tu GUI lo tienes en un archivo M, cuando ejecutas este archivo automaticamente todas tus variables incluyendo las globales son visibles en el workspace (cosa que no pasa con el GUIDE), no necesitas hacer nada para que sean visibles en tu workspace.

y con respecto a que solo te aparece el ultimo boton que creaste es porque no manipulaste la propiedad 'position' de tus botones, asi que siempre que los creas te los pone en la misma posicion y se van encimando, asi que por eso solo ves el ultimo. Eso es visualmente.
Ahora bien siempre que hagas controles con uicontrol siempre debes guardar su handle (identificador) del objeto que estas creando, asi que deberias poner:

hboton1 = uicontrol('style', 'pushbutton', 'CallBack', 'boton1call', ...);
hboton2 = uicontrol('style', 'pushbutton', 'CallBack', 'boton2call', ...);
etc

De esta forma cuando quieras saber alguna propiedad o quieras modificar te refieres a tus objetos por medio de sus identificadores

Otra cosa, NO coloques despues de la propiedad 'callback' directamente el codigo que quieres que se ejecute, una mejor manera es como te puse en el ejemplo de arriba. Si notas en la propiedad callback le estoy colocando el texto "boton1call", lo que tienes que hacer despues es simplemente hacer un archivo M llamado "boton1call.m" con todo el codigo que quieres que ejecute el callback. Es una mejor manera de hacerlo :)

Saludos
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

RE:Mostrar Variable Global de una GUI en el worksp

Publicado por puma (30 intervenciones) el 02/04/2008 00:38:26
HOLA,

TE VOY RESPONDIENDO ABAJO:

Hola Puma. Soy Batman (de Foros Matlab)
Me he tomado la libertad de escribirte al correo con lo que me comentas.

Veras estoy usando el GUIDE, la libreria uitools no la estoy usando, he mirado algo, pero me parece que es más complicado de usar que usar el GUIDE.
Al hacerlo con el GUIDE, las variables no son visibles en el workspace, como tu me dices.

PUMA: SI ES MAS COMPLICADO USAR LA LIBRERIA "uitools" PERO TIENES UN MEJOR CONTROL DE TODAS LAS VARIABLES Y OBJETOS DE TU GUI

Sabes de algún manual para programar con el uitools? Yo estoy usando un manual para usar el GUIDE, de "Diego Barragan" la verdad que muy bueno.

PUMA: PUES YO APRENDI HACIENDO EJEMPLOS DE TODAS LAS FUNCIONES QUE VIENEN EN LA LIBRERIA "UITOOLS", Y VIENDO LA AYUDA DE CADA FUNCION, LA AYUDA DE MATLAB ES BASTANTE BUENA

Mi gran problema esta en poder controlar las variables en el workspace, y el trozo que he programado con la libreria uicontrol:

uicontrol('style', 'pushbutton', 'CallBack','global ... MY_NODOS,disp(MY_NODOS),MY_NODOS = verticeNodo()','string','NODOS');

Lo vi en la ayuda de Matlab, lo copié y vi que podía controlar la variable global.
El guide te genera el archivo *.m

Yo necesito 4 variables globales: MY_NODOS, MY_ARISTAS, MY_SERVICIOS, y MY_GRAFO.
Tengo que crear un grafo con nodos, aristas y servicios.
Ya tengo las clases creadas (clase Nodo, clase Arista y clase Servicio y clase Grafo) y funcionan

Hire llamando a los metodos segun los necesite, segun el boton que pulse.

PUMA: YO CREO QUE NO ES NECESARIO QUE LAS VEAS EN EL WORKSPACE, SERIA MEJOR QUE LAS MANIPULES A NIVEL DE TU GUI, PARA ESTO SOLO ES NECESARIO DECLALARLAS COMO GLOBALES PARA QUE TUS VARIABLES SEAN VISTAS DE UNA FUNCION A OTRA EN TU GUI (AUNQUE NO LAS VEAS EN EL WORKSPACE NO IMPORTA)


¿Me puedes dar algun ejemplo en el que uses la propiedad del position para colocar los botones?

PUMA: uicontrol('style', 'pushbutton', 'position', [a b c d]), DONDE:
(a,b) -> ES LA COORDENADA DE LA ESQUINA INFERIOR DERECHA DE TU OBJETO
c -> ES EL ANCHO DE TU OBJETO
d -> ES EL ALTO

Otra cosa, ¿Pporque, siempre que use controles uicontrol, he de guardar su handle? Para que me puede servir luego el identificador?

PUMA: LOS DEBES GUARDAR PARA QUE DESPUES PUEDAS PEDIR ALGUNA PROPIEDAD O MODIFICAR ALGUNA PROPIEDAD, POR EJEMPLO SI TU EN UN CHECKBOX QUISIERAS SABER SI ESTA SELECCIONADO O NO, ENTONCES PREGUNTAS POR MEDIO DE SU IDENTIFICADOR, ASI:
r = get(hcheck, 'value');

ESTAS PREGUNTANDO POR LA PROPIEDAD 'VALUE' DEL OBJETO hcheck, (HCHECK ES EL IDENTIFICADOR)
DE LA MISMA FORMA FUNCIONA SI QUISIERAS MODIFICAR ALGUNA PROPIEDAD DE TU OBJETO

¿Puedes luego acceder al identificador en el command window?
CON EL GUIDE NO (SI TRABAJARAS CON UITOOLS SI PODRIAS), NUNCA LO HE HECHO PERO SEGURO HAY FORMAS DE HACERLO, GENERALMENTE SI TRABAJAS CON GUIDE, NUNCA ES NECESARIO QUE TRABAJES CON EL COMMAND WINDOW

Con respecto a lo de crear una funcion aparte (boton1 call) con el codigo de la variable, lo he intentado, pero no consigo que me saque el valor de la variable global MY_NODOS o MY_ARISTA por el workspace y que luego la variable almacene los datos de los Nodos.

PUMA: PARA EMPEZAR YO CREO QUE NO ES NECESARIO QUE REALICES UN BOTON CON EL UICONTROL, SOLO ES NECESARIO QUE DECLARES COMO GLOBALES TUS VARIABLES

PREGUNTA, PARA QUE QUIERES QUE TUS VARIABLES SE VEAN EN EL WORKSPACE??
SI ES PARA VISUALIZAR RESULTADOS LO PUEDES HACER EN EL MISMO GUIDE, O BIEN CREAR UN ARCHIVO *.MAT PARA GUARDAR TUS VARIABLES Y LUEGO SI QUIERES IMPORTARLAS AL COMMAND WINDOW PARA QUE SE VEAN EN TU WORKSPACE


Muchas gracias por haberme respondido.

Si puedes solucionarme estos problemillas te lo agradecería muuuccho.

Muchas gracias por todo y un saludo.

Batman

SALUDOS
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
sin imagen de perfil

RE:Mostrar Variable Global de una GUI en el worksp

Publicado por El jose (4 intervenciones) el 03/05/2013 07:56:56
Hola con todos tengo casi el mismo problema. En mi caso tengo una opción en mi guide de cargar señales en una variable (ecg) desde una base de datos de internet pero quiero ha estas variables guardarlas (editando su nombre) en un fichero, para que cuando no tenga servicio de internet poder acceder a estas, mediante otro push boton. e utilizado el comando "save" pero este me guarda todas las variables, que cree para procesar la señal. Solo quiero guardar la señal descargada. Si me pueden ayudar les agradecería un Mundo espero vean esto...

defaultValue = {'mitdb/101'};
handles.q=inputdlg('Nombre de la señal','CARGAR: ',1,defaultValue); % escribo el nombre de la señal a descargar
pause (0.2);
if isempty(handles.q); en caso de no escribir cancelar sin escribir el nombre de la señal retorno
return;
end
w=warndlg('Descargando','AVISO');
ecg=rdsamp(handles.q,'begin','00:00:00','stop','00:05.00','phys',true)% descarga los archivos de la señal para el registro especificado y retorna las muestras como vectores columna.
close(w);
pause (0.1);
hh=warndlg('Descarga finalizada','AVISO');
pause(0.2);
close(hh);
ecg(:,1)=[ ];% elimina la primera columna
ecg(:,2)=[ ]; % elimina la segunda columna
save 'ecg';
axes(handles.axes1);
plot(ecg),title('Señal ECG'),xlabel('Muestras'),ylabel('Amplitud de la señal ECG'),grid on;% graficamos la señal obtenida
guidata(hObject,handles);
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
Val: 6.975
Oro
Ha mantenido su posición en Matlab (en relación al último mes)
Gráfica de Matlab

RE:Mostrar Variable Global de una GUI en el worksp

Publicado por JOSE JEREMIAS CABALLERO (5917 intervenciones) el 03/05/2013 17:11:31
Cual es la dirección, de donde haz bajado el tolboox donde se encuentra el archivo rdsamp.m.
puede usar el comando load().

Saludos.
JOSE JEREMÍAS CABALLERO
Asesorías en Matlab
programador en matlab
Servicios de programación matlab
[email protected]

http://matlabcaballero.blogspot.com

http://www.lawebdelprogramador.com/foros/Matlab/1371532-
FORMA_DE_APRENDER_MATLAB.html
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
sin imagen de perfil

RE:Mostrar Variable Global de una GUI en el worksp

Publicado por El jose (4 intervenciones) el 03/05/2013 18:00:44
hola gracias por responder la verdad no creí tener una respuesta por que ya me ha pasado en muchos otros blogs pero bueno con respecto al problema que tenía para guardar las variables que contenían mis señales, lo he echo con uisave y funciona muy bien. Ahora estoy tratando de cargar esas variables pero quiero mediante un edit text tipear la varieble que deseé lo e intentado con "load" pero no cumple con lo que quiero. Con respecto al tolboox lo e descargado del siguiente link. Si me puedes ayudar con esta última duda te agradecería...
http://physionet.org/physiotools/matlab/wfdb-swig-matlab/
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
sin imagen de perfil

RE:Mostrar Variable Global de una GUI en el worksp

Publicado por El jose (4 intervenciones) el 03/05/2013 22:25:00
Hola otra vez yo.......en cuanto al problema que tenía de guardar ya lo e resuelto. Ahora no puedo cargar las variables que yo elija......mi duda parece cenicilla, la verdad me siento muy ignorante haciendo esta pregunta pero realmente necesito su ayuda.

la verdad no suena difícil pero me tiene un día sin poder solucionarlo. Cuando cargo desde el editor mediante "uiopen" un archivo.mat se cargan las variables que el archivo contiene en el workspace, hasta ahí todo bien es decir podría trabajar con las variables cargadas. El problema esta cuando utilizo un puchbutton en guide al abrir el archivo.mat no se cargan las variables en workspace, y por lo tanto no puedo trabajar con las variables que este contiene...Si me pudieran ayudar les agradecería infinitamente... Saludos.
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
Val: 6.975
Oro
Ha mantenido su posición en Matlab (en relación al último mes)
Gráfica de Matlab

RE:Mostrar Variable Global de una GUI en el worksp

Publicado por JOSE JEREMIAS CABALLERO (5917 intervenciones) el 03/05/2013 23:18:11
El tolboox donde se encuentra rdsamp, usa un java que no es compatible con el matlab que esta en mi pc y no puedo ejecutar tu codigo.

Saludos.
JOSE JEREMÍAS CABALLERO
Asesorías en Matlab
programador en matlab
Servicios de programación matlab
[email protected]

http://matlabcaballero.blogspot.com

http://www.lawebdelprogramador.com/foros/Matlab/1371532-FORMA_DE_APRENDER_MATLAB.html
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
Val: 6.975
Oro
Ha mantenido su posición en Matlab (en relación al último mes)
Gráfica de Matlab

RE:Mostrar Variable Global de una GUI en el worksp

Publicado por JOSE JEREMIAS CABALLERO (5917 intervenciones) el 05/05/2013 00:24:18
Mándame tu archivo *.mat además tu guide que estas haciendo para poder filtrarte, cuando dices guide, se supone que tiene dos archivos un archivo *.fig y otro archivo *.m.
Pero no te demores en enviar, ya que la oferta de asesoría vía correo va variando, un día puede ser y otro día no puede ser.

Por allí te puedo ayudar.

Saludos.
JOSE JEREMÍAS CABALLERO
Asesorías en Matlab
programador en matlab
Servicios de programación matlab
[email protected]

http://matlabcaballero.blogspot.com

http://www.lawebdelprogramador.com/foros/Matlab/1371532-FORMA_DE_APRENDER_MATLAB.html
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
sin imagen de perfil

RE:Mostrar Variable Global de una GUI en el worksp

Publicado por El jose (4 intervenciones) el 06/05/2013 04:14:28
Hola gracias por responder, ya lo e solucionado ahora funciona muy bien la verdad no ha sido tan difícil pero cuando se ignora algo todo se complica.....
Si a alguien le sirve lo e solucionado haciendo lo siguiente: GRACIAS Y SUERTE....

[file,folder]=uigetfile('*.mat');
filename=fullfile(folder,file);
data=load(filename);
ecg=data.ecg;
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
-1
Comentar