GTK言語バインディングの世界観です。
GTK+/GNOMEはC言語で書かれながら、GLib/GObjectという仕組みを使うことでオブジェクト指向を実現しています。
これにより、さまざまな言語のラッパーを作ることが可能です。それによって、言語バインディングが用意されています。
ArchWikiにGTK+の各種言語バインディングのサンプル一覧があります。
バインディング | 言語 |
---|---|
GTK+ | C言語 |
gtkmm | C++ |
GTK# | mono (C#/VB.NET) |
Java-GNOME | Java |
GTK-Perl | Perl |
PyGTK | Python |
Ruby/GTK+ | Ruby |
gjs | JavaScript |
ただ、これらのAPIの問題は、C言語のラッパーであるせいか、「init()関数やrun()関数をわざわざ記述する必要があって、意外と美しくない」ということがある。
C++やPythonを最初から使うのであれば、KDEのQt/PyQtを試しても良いかもしれない。ただしQtの場合もapp.exec();を実行する必要はある。どっこいどっこいだ。
たくさんのバインディングに対応しているとは言っても、本当は「一部分だけしか対応していない」とか、「開発状況が遅れていてバグや動かない機能が多い」となりがちである。
GTK Language Bindingsに、公式のバインディングのサポート状況がある。
C/C++, JavaScript, Python, Valaが公式でサポートされている。よって、できるだけこれらの言語で開発するように心がけよう。
ちなみに、これらの言語でどのようなコードになるかは、GNOME Developer Platform Demosから参照できる。
以下はRuby/GTKの例。
Rubyも参照のこと。
以下はGtk::Builderを使ってGladeのUIファイルを読み込む例。
gladeを使う例。GladeのUIファイルを読み込んでいる。Rubyのコード以外にGladeで作ったUIファイルを別途用意する必要がある。
標準のウィジェットを使うだけではなく、自分独自のウィジェットを作りたい場合は、GTK+では以下のようにカスタムウィジェットを開発できる。
PyGObjectは、PythonからGTKアプリケーションを書くための言語バインディングです。
Pythonのツールも参照のこと。
以下はPyGTKの例。
後日注記:GTK3においてはPyGTKはPyGObjectへと置き換えられる。これはGObjectへのPythonやその他言語のバインディング(GObject Introspectionというライブラリ)で、GTKなどGNOME系デスクトップライブラリをPythonやさまざまな言語から使えるようにする。言語バインディングの開発が楽になり、対応が遅れることも少なくなる。
以下はgtkmmの例。
C++も参照のこと。
以下はgjsの例。
GNOME-Shellと拡張機能は、gjsを用いてJavaScriptで記述されています。GNOMEデスクトップも参照のこと。
JavaScriptも参照のこと。
C#/GTK#による.NETアプリケーション開発についてはMonoを参照のこと。
ValaとGenieはGLibを使ったGNOME専用のオブジェクト指向言語です。C#/Monoを置き換えます。ValaとGenieを参照のこと。
OSS界隈の一部で流行っているのが、Rustバインディング。以下のリンクが参考になります。
Rustも参照のこと。
もっとたくさんの例はGTK+/開発 - ArchWikiからも参照できる。
GTK以外のスクリプト言語として、Tcl/Tkツールキットを使うこともできます。Tcl/Tkを参照のこと。
全般
C++
C#
Python
Ruby