funcion - "Error al usar get" con la función ''addlistener'' en Matlab GUI
gui matlab 2017 (1)
Tengo un problema en un código de GUI de Matlab. Digamos, por ejemplo, que quiero mostrar en la consola el valor de un cursor deslizante en la GUI. Pero el hecho es que quiero mostrarlo en tiempo real, por ejemplo, en cada posición del cursor, incluso si el clic sigue activado, mientras lo muevo.
Para esto, leí en Internet que la función ''addlistener'' podría ayudarme. Lo puse en la función slider_CreateFcn de la siguiente manera:
function slider1_CreateFcn(hObject, eventdata, handles)
h=addlistener(hObject,''Value'',''PostSet'',@(~,~)slider1_Callback)
Luego, agregué una función disp simple en la función de devolución de llamada, como esta:
function slider1_Callback(hObject, eventdata, handles)
get(hObject,''value'')
Ejecutar este código plantea este error:
Warning: Error occurred while executing callback:
Error using get
Cannot find ''get'' method for matlab.graphics.internal.GraphicsMetaProperty class.
Error in untitled>slider1_Callback (line xx)
get(hObject,''value'')
Si addlistener
función addlistener
, obviamente la actualización ya no existe en tiempo real, pero no recibo el mensaje de error. Por lo tanto, creo que el problema proviene directamente de la función addlistener
.
¿Qué está pasando y cómo puedo solucionarlo?
Primero que nada, el código que publicaste no es el código que está produciendo tu error. Supongo que el código que produjo tu error se veía así:
h = addlistener(hObject, ''Value'', ''PostSet'', @slider1_Callback);
En este caso, se pasa una meta propiedad como primer argumento de entrada a slider1_Callback
que le proporciona el error inmediato que está viendo.
Dicho esto, si desea llamar a slider1_Callback
debe crear una función anónima que en realidad pase el tipo (y número) correcto de entradas a la función de devolución de llamada. Aquí hay uno que hace eso.
function slider1_CreateFcn(hObject, eventdata, handles)
h = addlistener(hObject, ''Value'', ''PostSet'', ...
@(src,evnt)slider1_Callback(hObject, [], handles))
end
Sin embargo, lo mejor que puede hacer es usar una devolución de llamada separada en lugar de la que GUIDE crea para usted. Esto te da un poco más de flexibilidad. Además, si solo desea mostrar el valor, no necesita todas las demás entradas y puede alinear toda la devolución de llamada en lugar de tener una función separada.
h = addlistener(hObject, ''Value'', ''PostSet'', @(s,e)disp(get(hObject, ''Value'')));
Y para mostrarlo en acción: