我目前正在尝试一起使用 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*低级模块,而使用tge G[A-Z]更高级模块。这些模块 API 看起来像 C Gtk 的 API,我总是使用主要的 Gtk 文档来帮助自己。

在您的情况下,您想使用 GPack.notebook 对象及其 goto_page 方法。

其他提示

你已经找到了一个 多态性变体; 它们在手册第 4.2 节中进行了描述,而打字规则总是让我头疼。我相信签名所说的是该函数 switch_page 期望作为参数 a GtkSignal.t, ,这是由两种类型参数化的抽象:

  • 第一个类型参数,

    [> `notebook]
    

    包括任何多态变体作为值,包括 notebook (这就是大于的意思)。

  • 第二个类型参数是普通函数。

如果我正在阅读文档 GtkSignal.t 正确地说,它根本不是一个函数;这是一个包含三个字段的记录:

  • name 是一个字符串。
  • classe 是一个多态变体,可以是“笔记本”或其他东西。
  • marshaller 是函数类型的编组器 Gpointer.boxed option -> int -> unit.

我希望这有帮助。如果您遇到更多麻烦,手册中有关多态变体的 4.2 节可能会帮您解决。

许可以下: CC-BY-SA归因
不隶属于 StackOverflow
scroll top