Слушатель по умолчанию захочет передать 2 параметра по умолчанию в соответствии с вашим примером, который работает:
addlistener(hp, 'String', 'PostSet', @mycallback() )
Вы должны заметить, что в вашей функции есть 2 входа:
function mycallback ( src, event )
...
end
То, что вы пытаетесь сделать, это либо:
- Добавить 2 дополнительных аргумента
- Заменить 2 аргумента по умолчанию на другой 2.
Вы делаете это, контролируя функцию обратного вызова:
addlistener(hp, 'String', 'PostSet', @(src,evt)mycallback1(src, evt, hObject, handles))
или
addlistener(hp, 'String', 'PostSet', @(src,evt)mycallback1(hObject, handles))
Приведенные выше строки фиксируют обратные вызовы по умолчанию src
и evt
, и первая передает их вашему обратному вызову с вашими дополнительными переменными, другая - нет.
edit Мой ответ был сосредоточен на том, как вызвать слушателя, у меня нет набора инструментов для обработки изображений, поэтому я не могу создать код, который использует функцию impixelinfoval
.
Поскольку ваш код сам по себе не запускается, я создал небольшой пример ниже, который показывает вам, как добавить прослушиватели, которые реагируют, когда установлено свойство строки (в данном случае заголовок оси), оно запускается самостоятельно, поэтому Вы должны быть в состоянии запустить его и посмотреть, как он работает.
function untitled
%%
% create a figure
h = figure;
% create an axes
ax = axes ( 'parent', h );
% create a variable which we will plot
p = peaks(50);
% plot the variable
imagesc ( p, 'parent', ax );
% createa some initial title, x and y lables
t = title ( ax, 'Title' );
x = xlabel ( ax, 'X Label' );
y = ylabel ( ax, 'Y Label' );
% add a callback to run when the mouse moves.
h.WindowButtonMotionFcn = @(a,b)moveMouse (ax, t);
% add listeners which are triggered after the title has been set
% this listener passes the standard callbacks and some extras, namely
% the handles of the title and the y label
addlistener ( t, 'String', 'PostSet', @(h,evt)mycallback1(h,evt,t,y) )
% this listener only passes the handle to the title and the x label
addlistener ( t, 'String', 'PostSet', @(h,evt)mycallback(t,x) )
end
function moveMouse ( ax, t )
% update the title of the axes for
t.String = sprintf ( 'current point %.1f,%.1f', ax.CurrentPoint(1,1:2) );
end
function mycallback ( t, x )
% udpate the x label string
x.String = sprintf ( 'X Label -> title value: %s', t.String );
end
function mycallback1 ( h, event, t, y )
% update the y label string
y.String = sprintf ( 'Y Label -> title value: %s', t.String );
end
Этот графический интерфейс создан из кода (не руководства).
Это работает путем обновления названия осей, когда мышь перемещается, чтобы указать текущую точку. Я добавил 2 слушателей, которые обновляют строки меток X и Y после того, как заголовок был установлен.
Зная, как добавить слушателей, вы сможете использовать эту теорию в своем собственном коде, и это может подчеркнуть, какие у вас есть оставшиеся ошибки.
ваше сообщение об ошибке в комментариях ниже
addlistener(hp, 'String', 'PostSet', @(source, event, hObject, handles)myImageMagnifier3(source, event, hObject, handles))
Я подозреваю, что это должно быть:
addlistener(hp, 'String', 'PostSet', @(source, event)myImageMagnifier3(source, event, hObject, handles))
как в моем исходном примере.