una otra guide gui ejemplos desde abrir user-interface function matlab callback

user-interface - otra - guide matlab pdf



¿Cómo crear devoluciones de llamada dinámicas en MATLAB? (1)

La forma generalmente preferida de definir una función de devolución de llamada es usar un identificador de función en lugar de una cadena. Cuando utiliza una cadena, el código en la cadena se evalúa en el espacio de trabajo base . Esto significa que todas las variables y funciones utilizadas en la cadena deben existir en el espacio de trabajo base cuando se evalúa la devolución de llamada. Esto hace que el diseño de la GUI sea deficiente, ya que realmente no desea que la operación de su GUI dependa del espacio de trabajo base (que el usuario puede modificar fácilmente, lo que puede romper su GUI).

Esto también explica el error que está recibiendo. La función delete_graphic se define como una subfunción en su archivo rr_intervals.m . Las subfunciones solo pueden ser llamadas por otras funciones definidas en el mismo archivo m, por lo que delete_graphic no está visible en el espacio de trabajo base (donde se evalúa la devolución de llamada de la cadena). El uso de una devolución de llamada con función de manejo es una mejor alternativa. Así es como lo harías:

  • Cambie la devolución de llamada de su botón (línea 216) de ''delete_graphic'' a @delete_graphic .
  • Cambie la definición de función de delete_graphic (línea 185) a:

    function delete_graphic(hObject,eventdata)

    donde hObject es el identificador del objeto que emite la devolución de llamada y eventdata son datos opcionales proporcionados cuando se emite la devolución de llamada.

EDITAR:

Si desea pasar otros argumentos a delete_graphic , puede realizar los siguientes pasos:

  • Agregue los argumentos de entrada adicionales al final de la definición de la función. Por ejemplo:

    function delete_graphic(hObject,eventdata,argA,argB)

  • Use una matriz de celdas cuando establezca la devolución de llamada para su botón, donde la primera celda contiene el identificador de función y las celdas siguientes contienen cada una un argumento de entrada. Por ejemplo:

    set(delete_btn,''Callback'',{@delete_graphic,A,B});

    Hay una advertencia a esto, que es que los valores A y B almacenados en la matriz de celdas se fijan en lo que son cuando se establece la devolución de llamada . Si cambia A o B en su código , no cambiará los valores almacenados en la devolución de llamada de la matriz de celdas.

Si no puede usar la solución anterior (es decir, si A y B necesitan cambiar el valor), hay algunas otras opciones sobre cómo puede compartir datos entre las devoluciones de llamada de una GUI :

  • Puede volver a trabajar la organización de su código para hacer uso de funciones anidadas . Esto hace que sea muy fácil compartir datos entre devoluciones de llamadas. Algunos buenos ejemplos del uso de funciones anidadas para crear GUI se pueden encontrar en los ejemplos de la GUI de presentación de MathWorks File Exchange utilizando las Funciones anidadas de Steven Lord .
  • Puede almacenar datos en la propiedad UserData de un objeto uicontrol. Para acceder o actualizarlo, solo necesita el control del objeto.
  • Puede usar las funciones SETAPPDATA / GETAPPDATA para adjuntar datos a un objeto gráfico de control (es decir, uicontrol).
  • Como parece que su código fue creado usando GUIDE, puede hacer uso de la estructura de handles que GUIDE crea para almacenar datos usando la función GUIDATA .

Tengo esta línea de código:

delete_btn = uicontrol(rr_ops, ''Style'', ''pushbutton'', ''String'', ''Delete Graphic'', ''Position'', [13 135 98 20], ... ''Callback'', ''delete_graphic'');

y un poco más arriba esta función:

function delete_graphic global rr_list selected = get(rr_list, ''Value''); selected return;

¿Por qué este código no funciona? Realmente no entiendo ...

¿Qué necesito? Creo un botón y un cuadro de lista, haciendo clic en el botón - eliminar el elemento seleccionado de un cuadro de lista.

Thx por ayuda.

PD Siempre recibiendo este error:

??? Undefined function or variable ''delete_graphic''. ??? Error while evaluating uicontrol Callback

aquí está todo mi código: http://paste.ubuntu.com/540094/ (línea 185)