Spec-Zone.ru › Octave 6

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".

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

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

: fig = gcbf ()

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

Если обработчик не выполняется, эта функция возвращает пустую матрицу. Дескриптор, возвращённый этой функцией, такой же, как второй аргумент функции 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/v6.4.0/Callbacks.html

Spec-Zone.ru

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