2009-07-07 17 views

Respuesta

6

Una forma de lograr esto es crear los objetos de la GUI al inicio, pero establezca su propiedad "Visibilidad" en "off". Luego, cuando el usuario hace clic en un botón, configura la propiedad "Visibilidad" en "on". De esta forma, no creará nuevos objetos de la GUI mientras la GUI se está ejecutando, simplemente estaría cambiando qué partes de la misma son visibles o no.

EDIT: Si usted no sabe cuántos nueva interfaz gráfica de objetos que necesita hasta el tiempo de ejecución, así es como debería añadir los nuevos objetos GUI a la estructura de asas (donde hFigure es un identificador para el Figura GUI):

p = uicontrol(hFigure,'Style','pushbutton','String','test',... 
       'Callback',@p_Callback); % Including callback, if needed 
handles.test = p; % Add p to the "test" field of the handles structure 
guidata(hFigure,handles); % Add the new handles structure to the figure 

a continuación, por supuesto, tiene que escribir la función de devolución de llamada para el nuevo objeto de interfaz gráfica de usuario (si necesita uno), lo que podría ser algo como esto:

function p_Callback(hObject,eventdata) 
    handles = guidata(gcbf); % This gets the handles structure from the figure 
    ... 
    (make whatever computations/changes to GUI are needed) 
    ... 
    guidata(gcbf,handles); % This is needed if the handles structure is modified 

Las funciones de interés que utilicé en el código anterior son: GUIDATA (para almacenar/recuperar datos para una GUI) y GCBF (obtener el manejador de la figura principal del objeto cuya devolución de llamada se está ejecutando actualmente).

+0

El problema es que no sé cuántos I ' Tendré que crear hasta el tiempo de ejecución. ¿Puedo hacerlo alterando los controladores gui creados? Estoy tratando de hacer: p = uicontroles (figura, 'Estilo', 'pulsador', 'Cadena', 'prueba') conjunto (handleles.test = p) pero me está dando errores. ¿Hay otra manera? – victor

+0

el comando set mencionado anteriormente es un problema. ¿Qué estás tratando de lograr con eso? – MatlabDoug

+0

Bien, estoy intentando editar gnovice, y por alguna razón cuando ejecuto eso en una devolución de llamada generada por una guía, termina cambiando un elemento existente. Mi código: new_t = uicontrol (hObject, 'estilo', 'editar') entonces trato: K >> Get (new_t, 'Estilo') ans = pulsador Es extraño porque conjunto (handles.test, 'Style', 'edit') termina cambiando handles.pushbutton.Style. ¿Alguna idea? – victor

3

Usando UICONTROL, podrá agregar 'campos' (llamados uicontroles o widgets).

Usted tendrá que especificar el estilo para conseguir los cuadros de edición, botones, etc ...

En realidad se puede querer tener todos los widgets que ya existe en la guía y luego simplemente cambiar la visibilidad o habilitado propiedad según sea necesario.

puede encontrar mis tutoriales en vídeo sobre la creación de interfaz gráfica de usuario en MATLAB aquí: http://blogs.mathworks.com/videos/category/gui-or-guide/

Esto debería cubrir este y muchos otros temas relacionados en la construcción de interfaz gráfica de usuario.

+0

¿Puedo agregar el objeto uicontrol creado a los identificadores que se generan? Algo así como set (handleles.test, uicontrol_element) – victor

+0

cuando haces el UICONTROL, captura el controlador: handleles.newWidget = uicontrol (.......) – MatlabDoug

Cuestiones relacionadas