Spec-Zone.ru › Octave 5

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, или объектом figure resizefcn или closerequestfcn. Эти обработчики всегда прерывают выполняемый обработчик.

Ссылка на объект, содержащий выполняемый обработчик, может быть получена с помощью функции gcbo. Ссылка на предковый объект figure этого объекта может быть получена с помощью функции gcbf.

h = gcbo ()
[h, fig] = gcbo ()

Возвращает ссылку на объект, чей обработчик в настоящее время выполняется.

Если обработчик не выполняется, эта функция возвращает пустую матрицу. Эта ссылка получена из свойства корневого объекта "CallbackObject".

При вызове со вторым аргументом возвращает ссылку на figure, содержащую объект, чей обработчик в настоящее время выполняется. Если обработчик не выполняется, второй выходной параметр также устанавливается в пустую матрицу.

См. также: gcbf, gco, gca, gcf, get, set.

fig = gcbf ()

Возвращает ссылку на figure, содержащую объект, чей обработчик в настоящее время выполняется.

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

См. также: gcbo, gcf, gco, gca, get, set.

Обработчики событий также могут быть добавлены к свойствам с помощью функции addlistener, описанной ниже.

© 1996–2022 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/v5.2.0/Callbacks.html

Spec-Zone.ru

Настройки Оффлайн Что нового Помощь О нас
Spec-Zone .ru
спецификации, руководства, описания, API