Обмен данными в GUI, Matlab - PullRequest
0 голосов
/ 25 июля 2011

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

Я внимательно прочитал примеры, приведенные в файлах справки (changme и toolpalette), ноМне не удалось анимировать метод переноса данных из нового обратно в старый.

Вот моя проблема.

У меня есть два графических интерфейса, A, основной и B, которые яиспользуйте его для сбора входных данных, и я хочу передать данные обратно в B.

Вопрос 1:

Я хочу определить новые подклассы дескрипторов в A. Допустим, handles.newclass какя могу определить его свойства, например, «Строки»?

Вопрос 2:

В A кнопка имеет обратный вызов

B('A', handles.A);

, поэтомумы активируем B.fig.

После завершения работы в B он собрал следующие данные (строковые и двойные) в B (!)

title_1 itle_2 ... title_n

и

num_1 num_2 ... num_n

Я хочу передать данные обратно A.

Следуя инструкции, я написал приведенные ниже коды.

    mainHandles = guidata(A);
title = mainHandles.title_1;
set(title,'String',title_1);

Однако,когда я возвращаюсь к А, ручки в А вообще не менялись.

Пожалуйста, кто-нибудь поможет мне здесь.

Спасибо!

============= update ================

Решение, которое я нашел, заключается в добавлении дополнительных переменных (скажем, handles.GUIdata) к структуре ручек одного GUIи всякий раз, когда требуются данные, просто прочитайте их из соответствующего графического интерфейса.И это хорошо работает для меня, так как у меня есть основная панель управления и несколько суб-GUI.

Ответы [ 3 ]

0 голосов
/ 26 июля 2011

У меня были похожие проблемы, когда я хотел, чтобы внешние пакетные сценарии фактически управляли моими приложениями с графическим интерфейсом, но нет причин, по которым два графических интерфейса не могли бы делать то же самое.

Я создал объект Singleton, и когда приложение GUI запускается, оно получает ссылку на контроллер Singleton и устанавливает соответствующие дескрипторы gui в объект для дальнейшего использования.Как только у Singleton есть дескрипторы, он может использовать функции set и get для предоставления или обмена данными любому элементу управления графического интерфейса, для которого он имеет дескриптор.Любая функция / обратный вызов в системе может получить дескриптор синглтона, а затем вызвать подпрограммы на этом синглтоне, которые позволят обмениваться данными или даже управлять операциями.Ваш графический интерфейс A может, например, запросить у контроллера значение в поле X графического интерфейса B или даже изменить это значение напрямую, если это необходимо.Это очень гибкий.

В вашем случае не забудьте аннулировать любые дескрипторы, если GUI A или B пропадут, и проверьте, существует ли этот GUI-компонент, прежде чем получать или изменять какие-либо значения.Объект Singleton будет существовать даже при нескольких вызовах вашего приложения, пока сам Matlab остается запущенным, поэтому обязательно выполняйте очистку при выходе, если вы не хотите, чтобы устаревшая информация лежала вокруг.

http://www.mathworks.com/matlabcentral/fileexchange/24911-design-pattern-singleton-creational

0 голосов
/ 26 июля 2011

Что касается вопроса 2, похоже, что вы забыли сначала указать, что рисунок A должен быть активным при установке заголовка.Исправьте это, и все остальное выглядит хорошо (по крайней мере, небольшие отрывки, которые вы отправили).

0 голосов
/ 25 июля 2011

Существует краткое обсуждение этого вопроса здесь .

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...