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


0