Как создать функцию обратного вызова объекта uicontrol, который вызывает объект handle - PullRequest
0 голосов
/ 04 февраля 2019

Я определил объект кнопки uicontrol, и я хочу отображать что-то в ручках, когда нажимаю на кнопку.Когда я пытаюсь это сделать, я получаю сообщение об ошибке Undefined function or variable 'handles'.Он не видит дескрипторы или любой другой объект, который находится в коде GUI.

handles.c = 3;
A = uicontrol('Style', 'pushbutton');
A.Callback = display(handles.c)

Этот код выдает ошибку, которую я напечатал выше.Возможно, мне придется передать объект дескриптора в Callback в качестве входных данных, но я не знаю, как это сделать.

Заранее спасибо.

1 Ответ

0 голосов
/ 04 февраля 2019

Чтобы получить доступ к структуре данных handles, часто упоминаемой в документации пользовательского интерфейса MATLAB, вы должны использовать guidata для установки новых значений и извлечения существующих значений при обратном вызове.

Так что из любого места, если вы хотите установить значение, вы захотите сделать что-то вроде:

handles.c = 3

% Replace `gcf` with the explicit handle to your figure if possible
guidata(gcf, handles)

Тогда внутри вашего обратного вызова вы можете получить текущий guidata следующим образом:

function callback(src, event)
  handles = guidata(src);
  display(handles.c)
end

А затем назначьте эту функцию в качестве обратного вызова для вашего uicontrol

A = uicontrol('Style', 'pushbutton', 'Callback', @callback);

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

A.callback = @(src, evnt)display(getfield(guidata(src), 'c'))

Как видите, явная функция немного легче понять

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