MATLAB GUI — установка строкового свойства возвращает «Недопустимый или удаленный объект».

У меня возникли проблемы с установкой определенного свойства объекта в графическом интерфейсе MATLAB. Иногда скрипт возвращает ошибку

Недействительный или удаленный объект.

Вот текстовое поле, которое я хотел бы изменить.

conTxt = uicontrol('Style','text', 'String','Offline','ForegroundColor',[.99 .183 0.09], ...
        'Position', [70 20 100 30],...
        'Parent',hTabs(1), 'FontSize',13,'FontWeight','bold');

Я настроил последовательную связь, в которой текстовое поле используется в качестве обратной связи для пользователя. Когда приходит ответ от серийного номера, выполняется эта строка:

set(conTxt,'ForegroundColor', [.21 .96 .07],'String','Online');

Вы знаете, как это исправить?


person UserK    schedule 21.11.2014    source источник
comment
Иногда или постоянно? Вы назначаете текстовое поле структуре дескрипторов графического интерфейса?   -  person Benoit_11    schedule 21.11.2014
comment
1 - Иногда команда не работает. Я могу переключать цвет фона и значение строки в 90% случаев. 2 - Нет.   -  person UserK    schedule 21.11.2014


Ответы (1)


Я публикую это как ответ, потому что комментарий был бы слишком длинным и уродливым.

Из комментариев видно, что графический интерфейс не распознает текстовое поле, поскольку его нет в его структуре дескрипторов, поэтому, когда выполняется обратный вызов, графический интерфейс не знает, где искать элемент. Что, если вы попробуете следующее:

1) Храните компоненты в структуре handles, например:

handles.conTxt = uicontrol('Style','text', 'String','Offline','ForegroundColor',[.99 .183 0.09], ...
        'Position', [70 20 100 30],...
        'Parent',hTabs(1), 'FontSize',13,'FontWeight','bold');

и так далее для других компонентов.

2) В конце настройки вашего программного графического интерфейса обновите структуру дескрипторов с помощью свойства guidata графического интерфейса:

guidata(handles.figure,handles);

3) Затем в начале каждого обратного вызова используйте что-то вроде этого:

handles = guidata(gcf);

для получения структуры дескрипторов и доступа к ее компонентам.

Надеюсь, это поможет!

person Benoit_11    schedule 21.11.2014