4

私は現在、OCaml と GTK を一緒に使用して実験しています ( lablgtkバインディングを使用)。ただし、ドキュメントは最適とは言えず、ほとんどの機能を使用する方法を理解することはできますが、ノートブックのページを変更する (別のタブに切り替える) ことに行き詰まっています。

必要な機能は見つかったのですが、使い方がわかりません。ドキュメントは、のサブモジュールにあることを示唆しているようですがGtkPackProps.Notebook、これを呼び出す方法がわかりません。

また、この関数には、これまでに見たものとは異なる型シグネチャがあります。

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

を返すと思いますGtkSignal.tが、最初のパラメーターを関数に渡す方法がわかりません(括弧内の部分全体)。

ノートブックのページを変更する方法を示すサンプル コードを誰かが持っているか、またはこれを行う方法についてのヒントを教えてもらえますか?

4

2 に答える 2

5

ポリモーフィック バリアントが見つかりました。それらはマニュアルのセクション 4.2 で説明されており、入力規則にはいつも頭が痛くなります。署名が言っていることは、関数switch_pageが引数 a として期待しているということだと思いますGtkSignal.t。これは、2 つの型によってパラメーター化された抽象化です。

  • 最初の型パラメーター、

    [> `notebook]
    

    を含むポリモーフィックなバリアントを値として含みますnotebook(これが大なりの意味です)。

  • 2 番目の型パラメーターは通常の関数です。

GtkSignal.tドキュメントを正しく読んでいる場合、それは関数ではありません。これは 3 つのフィールドを持つレコードです。

  • nameは文字列です。
  • classe``notebook` か何か他のものであるポリモーフィックなバリアントです。
  • marshaller関数 type のマーシャラーですGpointer.boxed option -> int -> unit

これが役立つことを願っています。さらに問題がある場合は、マニュアルのセクション 4.2 のポリモーフィック バリアントで問題が解決する可能性があります。

于 2010-07-14T01:45:40.513 に答える
5

あなたが見つけたのは関数ではなく信号です。タイプに表示される機能タイプは、ページ切り替えが発生したときに呼び出されるコールバックのタイプですが、ページ切り替えは発生しません。

ちなみに、switch_page の型は次のように読み取られGtkSignal.tます [> `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 に答える