Вопрос

В настоящее время я экспериментирую с совместным использованием OCaml и GTK (используя лаблгтк привязки).Однако документация не самая лучшая, и хотя я могу понять, как использовать большинство функций, мне приходится менять страницы блокнота (переключаться на другую вкладку).

я нашел функция, которую мне нужно использовать, но я не знаю как чтобы использовать его.Документация, кажется, предполагает, что она находится в подмодуле GtkPackProps.Notebook, но я не знаю, как это назвать.

Кроме того, эта функция имеет сигнатуру типа, отличную от всех, которые я видел раньше.

 val switch_page : ([> `notebook ], Gpointer.boxed option -> int -> unit) GtkSignal.t

Я думаю, что он возвращает GtkSignal.t, но я понятия не имею, как передать в функцию первый параметр (вся часть в скобках).

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

Это было полезно?

Решение

Что вы нашли, не функция, а сигнал.Функциональный тип, который вы видите в своем типе, это тип обратного вызова, который будет вызываться, когда выключатель страницы произойдет, но не приведет к этому.

Кстати, тип Switch_Page читается как: сигнал (GtkSignal.t), поднятый ноутбуком [> `notebook ], чей обратные вызовы имеют тип Gpointer.boxed option -> int -> unit

Вообще говоря, с Lablgtk, вам лучше оставаться в подальше модулей GTK * низкого уровня, а также использовать модуль более высокого уровня уровня G [A-Z].Эти модуль API выглядят как C GTK One, и я всегда использую основной документ GTK, чтобы помочь себе.

В вашем случае вы хотите использовать объект gpack.notebook и его метод goto_page.

Другие советы

Вы нашли полиморфный вариант; они описаны в руководстве в разделе 4.2, и правила набора текста всегда ломают мне голову.Я считаю, что подпись говорит о том, что функция switch_page ожидает в качестве аргумента GtkSignal.t, который представляет собой абстракцию, параметризованную двумя типами:

  • Первый параметр типа,

    [> `notebook]
    

    включает в качестве значений любой полиморфный вариант, включая notebook (вот что означает «больше»).

  • Параметр второго типа — обычная функция.

Если я читаю документацию для GtkSignal.t правильно, это вообще не функция;это запись с тремя полями:

  • name это строка.
  • classe — это полиморфный вариант, который может быть «блокнотом» или чем-то еще.
  • marshaller является маршалером для типа функции Gpointer.boxed option -> int -> unit.

Надеюсь, это поможет.Если у вас возникнут дополнительные проблемы, раздел 4.2 руководства, посвященный полиморфным вариантам, может вас решить.

Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top