4

我目前正在尝试同时使用 OCaml 和 GTK(使用lablgtk绑定)。但是,文档并不是最好的,虽然我可以弄清楚如何使用大多数功能,但我仍然坚持更改笔记本页面(切换到不同的选项卡)。

我找到了我需要使用的功能,但我不知道如何使用它。该文档似乎表明它位于 的子模块中GtkPackProps.Notebook,但我不知道如何调用它。

此外,这个函数的类型签名与我以前见过的任何不同。

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

我认为它返回 a GtkSignal.t,但我不知道如何将第一个参数传递给函数(括号中的整个部分)。

有没有人有一些示例代码显示如何更改笔记本页面,或者可以给我一些关于如何做到这一点的提示?

4

2 回答 2

5

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

  • 第一个类型参数,

    [> `notebook]
    

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

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

如果我GtkSignal.t正确阅读了文档,那根本就不是功能;这是一个包含三个字段的记录:

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

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

于 2010-07-14T01:45:40.513 回答
5

你发现的不是函数而是信号。您在其类型中看到的功能类型是在页面切换发生时将调用但不会导致它的回调的类型。

顺便说一下 switch_page 的类型被读作:GtkSignal.t由 notebook 引发的信号 () [> `notebook ],其回调具有类型Gpointer.boxed option -> int -> unit

一般来说,使用lablgtk,您最好远离Gtk* 低级模块,而使用tge G[AZ] 高级模块。这些模块 API 看起来像 C Gtk 之一,我总是使用 Gtk 主文档来帮助自己。

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

于 2010-07-14T08:06:38.623 回答