15.4.4 Обработчики событий ¶
Функции обратного вызова могут быть связаны с графическими объектами и вызываются после того, как произойдут определённые события. Основной структурой всех функций обратного вызова является
function mycallback (hsrc, evt) ... endfunction
где hsrc — ссылка на источник обратного вызова, а evt — данные, специфичные для события.
Функция может быть предоставлена в виде ссылки на обычную функцию Octave, анонимной функции или как строка, представляющая команду Octave. Последний синтаксис не рекомендуется, так как ошибки синтаксиса появятся только при выполнении строки. См. Раздел Ссылок на функции и анонимных функций.
Это можно связать с объектом либо во время создания объекта, либо позже с помощью функции set. Например,
plot (x, "DeleteFcn", @(h, e) disp ("Window Deleted")) где в момент удаления графика будет выведено сообщение "Window Deleted".
Дополнительные пользовательские аргументы могут быть переданы функциям обратного вызова и будут переданы после двух аргументов по умолчанию. Например:
plot (x, "DeleteFcn", {@mycallback, "1"})
...
function mycallback (h, evt, arg1)
fprintf ("Closing plot %d\n", arg1);
endfunction Предупреждение: Второй аргумент в функциях обратного вызова — evt — реализован только частично в графическом инструменте Qt:
- События щелчка мыши:
evtпредставляет собой значение классаdouble: 1 для левой, 2 для средней и 3 для правой кнопки мыши. - События нажатия клавиши:
evt— структура с полямиKey(строка),Character(строка) иModifier(массив ячеек строк). - Другие события:
evtпредставляет собой значение классаdoubleпустую матрицу.
Основные функции обратного вызова, доступные для всех графических объектов:
- CreateFcn: вызывается в момент создания объекта. Она не вызывается, если объект изменяется каким-либо образом, поэтому имеет смысл определять этот обратный вызов в вызове функции, определяющей объект. Обратные вызовы, добавленные к
CreateFcnпозже с помощью функцииsetникогда не будут выполнены. - DeleteFcn: вызывается в момент удаления объекта.
- ButtonDownFcn: вызывается, если нажата кнопка мыши, когда указатель находится над этим объектом. Обратите внимание, что интерфейс gnuplot не реализует этот обратный вызов.
По умолчанию, функции обратного вызова помещаются в очередь (они выполняются одна за другой в очереди событий), если не используются функции drawnow, figure, waitfor, getframe, или pause. Если выполняемый обратный вызов вызывает одну из этих функций, это заставляет Octave очистить очередь событий, что приводит к прерыванию выполняемого обратного вызова.
Можно указать, что обратные вызовы объекта не должны прерываться, установив свойство объекта interruptible в "off". В этом случае Octave определяет, что делать, в зависимости от свойства busyaction объекта прерывающего обратного вызова:
-
queue(по умолчанию) -
Прерывающий обратный вызов выполняется после того, как вернется выполняемый обратный вызов.
cancelПрерывающий обратный вызов отбрасывается.
Свойство interruptible не имеет эффекта, когда прерывающий обратный вызов является deletefcn, или фигурой resizefcn или closerequestfcn. Эти обратные вызовы всегда прерывают выполняемый обратный вызов.
Ссылка на объект, содержащий выполняемый обратный вызов, может быть получена с помощью функции gcbo. Ссылка на родительскую фигуру этого объекта может быть получена с помощью функции gcbf.
-
:
h =gcbo()¶ -
:
[h, fig] =gcbo()¶ -
Возвращает ссылку на объект, обратный вызов которого выполняется в данный момент.
Если ни один обратный вызов не выполняется, эта функция возвращает пустую матрицу. Эта ссылка получена из свойства корневого объекта
"CallbackObject".При вызове со вторым выходным аргументом возвращает ссылку на фигуру, содержащую объект, обратный вызов которого выполняется в данный момент. Если ни один обратный вызов не выполняется, второй выходной аргумент также устанавливается в пустую матрицу.
-
:
fig =gcbf()¶ -
Возвращает ссылку на фигуру, содержащую объект, обратный вызов которого выполняется в данный момент.
Если ни один обратный вызов не выполняется, эта функция возвращает пустую матрицу. Ссылка, возвращаемая этой функцией, совпадает со вторым выходным аргументом функции
gcbo.
Обработчики событий также можно добавлять к свойствам с помощью функции addlistener описанной ниже.
© 1996–2023 The Octave Project Developers
Permission is granted to make and distribute verbatim copies of this manual provided the copyright notice and this permission notice are preserved on all copies.
Permission is granted to copy and distribute modified versions of this manual under the conditions for verbatim copying, provided that the entire resulting derived work is distributed under the terms of a permission notice identical to this one.Permission is granted to copy and distribute translations of this manual into another language, under the above conditions for modified versions.
https://docs.octave.org/v9.2.0/Callbacks.html