2016-03-10 3 views
0

Я не программист GUI, как станет очевидным. Во всяком случае, я пытаюсь разобрать графический интерфейс. Я использую программу под названием art (найдено here, если это полезно), которая генерирует фигуры и переменные, которые я хотел бы сохранить. Вы можете вызвать искусство из пакетного скрипта и заставить его прочитать файл конфигурации для своих входов, что я и делаю, но вы должны вручную генерировать и сохранять большую часть своего вывода (переменных и цифр) в графическом интерфейсе. Я бы хотел автоматизировать этот процесс, но я действительно борется.В Matlab, как вызвать функции обратного вызова GUI без GUI?

Я думаю, что суть моей проблемы будет решена, если я знаю, как заставить функции обратного вызова вызываться. Например, в статье showCorr_Callback(hObject, eventdata, handles) есть функция, которая управляется переключателем в графическом интерфейсе. Он имеет условие проверки на выполнение:

if (get(handles.showCorr,'Value') == get(handles.showCorr,'Max'))

Я попытался вставить

mx = get(handles.showCorr,'Max')) 
setappdata(handles.showCorr,'Value', mx) 

в функцию Я знаю, выполняется, функция открытия, function art_OpeningFcn(hObject, eventdata, handles, varargin). Это, похоже, не имеет никакого эффекта. Если бы я знал, как выполнить функции обратного вызова, возможно, я мог бы вставить код, который сохраняет фигуру в функциях. Где-то в сценариях графического интерфейса Matlab должно быть что-то, что постоянно тестируется на изменение состояния в графическом интерфейсе. Где это? Как я могу обмануть его, думая, что нажата кнопка радиосвязи?

Спасибо за вашу помощь, и, пожалуйста, дайте мне знать, если мне нужно предоставить дополнительную информацию.

ответ

1

Прежде всего, если вы хотите установить Value из handles.showCorr, вы не будете использовать setappdata как только хранит произвольные данные (по паре ключей/значение) в объект графики. Вы действительно хотите установить Valueproperty.

set(handles.showCorr, 'Value', get(handles.showCorr, 'Max')) 

Это должен вызвать какие-либо обратные вызовы, которые назначены handles.showCorr.

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

showCorr_Callback(hObject, eventdata, handles); 
+0

Большое спасибо за помощь. Я поддерживаю ваш ответ, но не принимаю его, потому что это был полезный, но частичный ответ. Исключение составляет ваша линия hgfeval. Работала с помощью 'set (handles.showCorr, 'Value', get (handles.showCorr, 'Max'))', а затем явно вызывала функцию с помощью showCorr_Callback (hObject, eventdata, handle); '. В ретроспективе кажется глупым, что раньше я этого не делал, но я был смущен тем, какие аргументы он принял. Только многие из насмешливо отлаживателя показали мне, что необходимые ему аргументы имели то же имя, что и в определении функции. – Katie

+0

@ Кати, в чем была ошибка? Также вы можете сделать это так, как вы это сделали, и я могу добавить его в ответ для полноты. – Suever

+0

@ Katie Я считаю, что обновил свой ответ, так что теперь * оба * должны работать. Вы можете проверить первый для меня? – Suever

Смежные вопросы