Как получить двойной массив, разделенный пробелами, из графического интерфейса в MATLAB

Привет, у меня есть графический интерфейс Matlab, который принимает массив, разделенный пробелами (двойной или целочисленный), и когда нажимается кнопка графического интерфейса, мне нужно передать эти данные в другой отдельный файл .m в том же каталоге. В button_cal_Callback я пытаюсь получить данные.

function button_cal_Callback(hObject, eventdata, handles)

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

S = guidata(handles.edit_S,'array');
S = get(hObject,'edit_S');
S = str2double(get(handles.edit_S,'string'));

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

пример введенных значений>> S = 1638 1500 1688 1688 1688 1688 1688 1713 1738 1763 1788 1819


person tk_    schedule 21.08.2014    source источник


Ответы (1)


такимхараК - я попытаюсь описать, почему каждая из вышеперечисленных попыток на самом деле не делает то, что вы хотите.

S = guidata(handles.edit_S,'array');

Ознакомьтесь с документацией по guidata. Эта функция используется только для получения или установки (обновления) структуры дескрипторов с пользовательскими данными графического интерфейса. По умолчанию handles включает все дескрипторы виджетов GUI, а также любые данные, которые вы решите добавить. Приведенная выше строка кода является попыткой сохранить строку «массив» с помощью дескриптора виджета редактирования текста. Это фактически перезапишет все данные дескрипторов!

S = get(hObject,'edit_S');

Здесь hObject — это дескриптор кнопки, поэтому он не имеет ничего общего с виджетом редактирования текста. get(hObject,'someField') получает атрибут someField из hObject. Если он не существует, как в этом случае, генерируется ошибка.

S = str2double(get(handles.edit_S,'string'));

Это почти то, что вы хотите. Используя дескриптор edit_S, вы пытаетесь получить данные String, связанные, например, с этим текстом, написанным в виджете редактирования текста. Но он, вероятно, возвращается как ячейка, поэтому вы должны выполнить преобразование из массива ячеек в массив символов до str2num (или str2double)

numericData = str2num(char(get(handles.edit_S,'string')));

Это должно создать массив значений, которые вы теперь можете передать следующей функции. Попробуйте это и посмотрите, что произойдет!

person Geoff    schedule 21.08.2014