Matlab - control de un timer y un gui

   
Vista:

control de un timer y un gui

Publicado por Maesla (15 intervenciones) el 20/12/2007 21:15:37
Esta pregunta es un poco avanzada, a si que si alguien sabe algun foro avanzado (aunque sea en ingles) para postearla se lo agradeceria. Si puede ser sin registrarse mejor que me da pereza.
O lo mismo alguien lo sabe y me da una alegria!!

A ver, el problema esque tengo un timer que me ejecuta una funcion.
La funcion en cuestion lo que hace es elegir una foto al azar del directorio donde se esté ejecutando el programa y la muestra en un axe de la interfaz grafica.
Bien, el problema es que la primera que se ejecuta el timer dibuja la foto en el axe de la figura, pero las siguientes veces crea el un figure y ahi va mostrando las fotos que va elegiendo al azar.
La verdad que es bastante raro y no se como lo puedo solucionar.
He incluido una funcion findobj en el codigo de la funcion llamada por el timer y por lo que puedo deducir por el timer es como si despues de la primera ejecucion de la funcion, las siguientes veces el timer no perteneciera al entorno del GUI.
La funcion recibe bien todos los datos del hObject porque he probado a cambiar propiedades de elementos del GUI desde la funcion del disparador
Os meto el codigo de la funcion

function abrirFoto(objeto, evento,hObject)

handles = guidata(hObject);

disp ('Paso de esta linea')
findobj('type','axes')
%esta es la funcion clave que no me acaba de funcionar)
axes(handles.axes1)

%meto todas las fotos de un directorio en un vector
fotos = dir('*.jpg');
n_fotos = length(fotos);
elegir = ceil(rand()*n_fotos);
foto = fotos(elegir).name;
fotoAbierta = imread(foto);
fotoAbierta = imresize(fotoAbierta,[size(fotoAbierta,1)/4 size(fotoAbierta,2)/4]);
fotoAnterior = objeto.userData;
set(objeto,'UserData',foto);
handles.foto1 = foto;
% if(isempty(fotoAnterior))



imshow(fotoAbierta);

--------------------------------------------------------------------------
En el gui
Creacion del disparador en el iniciador

handles.disparadores(1)= timer('TimerFcn',{'abrirFoto',hObject},'ExecutionMode','fixedRate','Period',1,'TasksToExecute',3);
handles.axes(1) = handles.axes1;
guidata(hObject, handles)

------------------------------
start del disparador en un boton
function pushbutton1_Callback(hObject, eventdata, handles)

for i = 1: length(handles.disparadores)
% axes(handles.axes(i))
start( handles.disparadores(i));
end
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

control de un timer y un gui

Publicado por Erik Velásquez (1 intervención) el 04/04/2014 01:49:51
Buen día sé que ya han pasado varios años desde que realizaron esta pregunta pero igual a mí me paso lo mismo, pero encontré la solución, así que por si a alguien le llega a ocurrir lo mismo la solución es la siguiente deben de dar doble clic en cualquier parte de la ventana del GUI, que no sea sobre algún botón o axes y luego en la venta Inspector van a la propiedad HandleVisibility y cambia la opción callback por on guardan y listo eso es todo.


Espero le sea de ayudad a alguien ya que tarde bastante en encontrar la solución, pero bueno la encontré en el siguiente link http://www.mathworks.com/matlabcentral/answers/91363
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