Estoy construyendo una GUI sencilla de MATLAB utilizando GUÍA. Tengo una lista de elementos. La mayor parte del tiempo, funciona como se espera, pero a veces (por lo general después edito la figura con GUIDE) poblar el cuadro de lista provoca que desaparezca, junto con este mensaje:GUÍA DE MATLAB cuadro de diálogo GUI desaparece intermitentemente con error aparentemente obsoleto
Warning: single-selection listbox control requires a scalar Value
Control will not be rendered until all of its parameter values are valid
Este comportamiento desafía depuración! Cuando paso, funciona como se esperaba (sospecho que es una especie de carrera de subprocesos o algo así). Además, generalmente desaparece después de reiniciar el entorno MATLAB, en condiciones idénticas.
Toda la documentación encontrada en este error hace referencia a versiones anteriores/antiguas de MATLAB (estoy usando R2010a).
¡Cualquier idea o información sobre este tema sería muy apreciada!
EDIT: gracias a Mikhail, parece que he resuelto el problema. Estoy publicando mi código aquí para referencia futura.
Después de mucha impresión de depuración y clics desenfrenados, encontré que a veces cuando se le pregunta a la lista de selección qué es lo que se selecciona, se obtiene un resultado vacío. Este y otros problemas hicieron que las cosas se descontrolaran. Trasladé todas mis interacciones de escritura al cuadro de lista en una función centralizada, y escribí un código de prueba para asegurarme de que las cosas se mantengan como deberían.
Tenga en cuenta que esto ha sido probado en mi propio entorno (en R2010a) y no exhaustivamente. Además, el código es un poco redundante, pero de todos modos me hizo sentir bien. (Es decir. itemcount
no puede ser inferior a 0 ...)
function ensure_listbox_ok(handles)
%check to make sure it does not suck - ask what it has
thestrings = get(handles.listbox_files, 'String');
selection = get(handles.listbox_files, 'Value');
itemcount = length(thestrings);
betterselection = selection;
if(itemcount <= 0)
betterselection = 1;
else
if(selection > itemcount)
betterselection = itemcount;
end
end
%never use zero!!!! even if 1 is out of bounds.
if(isempty(betterselection) || betterselection <= 0)
betterselection = 1;
end
%uncomment for debug logging
%display(['Was: ' num2str(selection) ', cleaned: ' num2str(betterselection)]);
%update if we are out of bounds.
if(isempty(selection) || betterselection ~= selection)
set(handles.listbox_files, 'Value', betterselection);
end
Hola Mikhail, ¡gracias por responder! Todavía me gustaría obtener más información. Usted dice que listbox está vacío por defecto, pero NO debe estar vacío ... ¿cómo funciona eso? ¿Cómo es que funciona a veces, pero no todo el tiempo? ¿Cómo es que no puedo solucionar este error? Estoy bastante seguro de seguir todas las pautas para este uicontrol, y sin embargo, A veces se bloquea en mí, en condiciones idénticas. ¡Gracias por ayudar! – eli
Gracias por los excelentes consejos. Obviamente tienes mucha experiencia con este tipo de cosas. Me apuntaste en la dirección correcta, y ahora hago una lista de cosas mucho más cuidadosa. Estoy publicando otra respuesta con mi código, pero obtienes el premio =) – eli