Linuxデスクトップの世界観に戻るGTKの世界観GTKの世界観です。GTK言語バインディングやGNOMEやLinux(X11周辺)やQtも参照のこと。GTK+/GLibGTK+とはX11やGNOMEで使われるGUIツールキット。C言語でオブジェクト指向を行う独自のGLibという仕組みを使いながら、C++だけではなくC#やPythonなどにも対応することで、「ハッカー界の多くの言語」に門を開きながら、ウィジェットとイベント・シグナルをベースとした「オブジェクト指向のツールキット」を提供している。GNOMEでの標準ツールキット。KDEで使われているQtが当時フリーでは無かったため、GNUによってGNOMEとともに開発された。開発元はPhotoshopキラーとして有名なGIMP。WikipediaソースコードgitGTK+からGTKに名称変更GTK+は「GTK」に名称を変更した。以下の記述は執筆時の「GTK+」のままだが、これから書く新しい記事は「GTK」としたい。基本的には、C言語の関数でウィジェットを作っていって、イベント関数を登録していく感じになるのかなと思います。相花毅氏がとても有用なドキュメントをたくさん翻訳されてくださっているので、そちらを参考にしてください。(2003-01-24版)実際のところ、GTK+とVBは良く似ている。VBで作るのと全く同じように、ツールキットに対して関数を設定することで、GTK+プログラムは出来上がる。3.0入門サイト以下のサイトが参考になる。gtk+-2.0`まず、gtk_init関数で初期化を行い、ウィンドウwindowをg_object_new関数で作る。g_signal_connect関数を使って、windowのdelete-eventイベントに自分で作ったdelete_event関数を、destroyイベントに自分で作ったend_program関数をコールバック関数として(関数名にG_CALLBACK()をつける)登録している。同様に、ボタンbuttonを作った上でbuttonのclickedイベントに自分で作ったhello関数をコールバック関数として登録している。それらが終わった後で、gtk_container_add関数を使ってコンテナとしてのwindowにウィジェットとしてのbuttonを追加し、gtk_widget_show_all関数でそれらを表示している。最後に、gtk_main関数でアプリケーションのイベントループを開始している。GTKウィジェットGTK+ウィジェットの例GTK+ウィジェットのギャラリー(一覧)は以下にあります。日本OSS推進フォーラムを参考に執筆しました。主なウィジェットには以下のようなものがある。トップレベルのウィンドウ。ポップアップするウィンドウ。押されたらシグナルを生成するボタン。状態を保持するボタン。ドロップダウン式のメニュー。メニューで使用するアイテム。ウィジェットを縦、横の規則正しいパターンの中にパッキングする。ボタンとその他のウィジェットで構成するバー。ウィジェット概観より引用。Manualを参照のこと。`GtkVSeparatorGTK+でカスタムウィジェットカスタムウィジェットを作る方法は以下(RubyとC++とValaとC言語)。(C言語)他の言語バインディングについても検索するとたくさん出てきます。GTKの基本コンポーネントGObject/GLibGNOMEのオブジェクトシステム。C言語などを通じて、オブジェクト指向のプログラミングが出来る。応用言語にVala(GLibをベースにC#/.NETを模したコンパイル言語)などがある。GLibGTK+GIMPの開発チームによって作られたウィジェット・ツールキット。動作が遅くのっぺりしているがきちんと動くことで有名。Cで書かれていて、さまざまな言語フロントエンドがあり、色んなオープンソースのプログラミング言語でGUIアプリケーションを表示・操作することが出来る。WikipediaGTKのテーマテーマ集サイトとしてはgnome-look.orgがあります。Qtほど美しくありませんが見た目を綺麗なものに変えられます。gnome-look.orgGDK/CairoGDKはGTK+で使われている低レベルなグラフィックライブラリ。ディスプレイサーバーとGTK+の中間に位置する。基本的なレンダリングや原始的な描画、ラスターグラフィックス、カーソル、フォント、ウィンドウイベントやドラッグ&ドロップなどを担当する。CairoはベクターグラフィックスベースのプログラミングAPI。APIやQuartzにも対応しているため、GIMPなどはWindows版も存在する。Wikipedia(英語)を参考に執筆しました。3.0の下で再許諾いたします。GTK+をWindowsで動かすあまり一般的ではないが、GTK+もクロスプラットフォームに対応していて、WindowsでもGTK+アプリケーションを開発することができる。以下のようなページを参照のこと。はいたとえば、GTK+で作られたGIMPやInkscapeはWindowsでも動くようになっている。GTKのコードを読もうGTKはオンラインからGitLabのリポジトリを参照することでコードを参照できる。パソコンの初心者がパソコンを操作して、まず最初に興味を持つのはGUIツールキットではないかと思う。世間ではカーネルやコンパイラばかりの内部仕様(インターナル)が解説されるが、本当は誰もが知りたいのはX11やGTK/Qtのコードではないかと思う。Manual国際化とアクセシビリティATK/ORCAアクセシビリティツールキット。視覚障害や聴力障害など、さまざまな程度の障害がある人などを対象に、GNOMEを使いやすくする。アクセシビリティはA11y(Accessibilityの短縮形)と呼ばれ、i18n(internationalizationの短縮形で、アプリケーションを国際的に使いやすくする)やl10n(localizationの短縮形で、その地域によって使いやすくする)やm17n(multilingualizationの短縮形で、たくさんの言語で使いやすくする)などと同様にGNOMEでは重要視されている。評議会(Board)などでは、評議会メンバーに視聴覚障害を持った方が居ることが分かる。ORCAと呼ばれるアクセシビリティ用のツールもある。WikipediaPangoPangoはGNOMEで使われている多言語・多文字の表示システム。Panはギリシャ語で「汎用の」という意味を持ち、goは日本語の「語」からつけられている。Wikipediaソースコードgitビルドシステムpkg-configGTK+アプリケーションはpkg-configを用いて独自のコマンドでコンパイルする。pkg-configによるコンパイルは以下のようになる。ウィンドウ表示(GTK+)より引用。)主にC言語によるGTK+プログラムでは、上のようにコンパイルを実行しなければコンパイルが通らない。Make/Autotoolsも参照のこと。Manual言語バインディングGTKをさまざまな言語でGTKアプリケーションをさまざまな言語で開発できる言語バインディングについては、GTK言語バインディングを参照のこと。開発GTK+/GNOMEアプリケーションを開発したい英語だけど、以下のリソースが参考になるかもしれない。辿っていくと既存アプリケーションのソースコードをブラウズできる。GNOMEあるいは、自分で検索してください。さまざまな言語が使えるし、GladeというGUIデザインツールもあります。Google検索GladeGladeと呼ばれるGTK+用のGUIデザイナーがあります。Gladeを参照のこと。余談GTK+はクラス設計が未熟GTK+/GLibの問題として、クラスやAPIの設計が未熟である、というのが挙げられる。C言語で完結できて、さまざまな言語で開発できるとは言うが、クラスライブラリやAPIの設計が、DelphiやBeOSほど美しくない。MSが.NET、OracleがJava、MacがCocoaなどで「美しいクラス設計」をしているのとは対照的に、たとえばgpointerのように型名に「g」をつける必要があるなど、「醜くて、使い辛くて、分かりにくくて、美しくない」という特徴がある。いう人は、一度GTK#/Monoを試してみよう。LinuxでもGTK+とMonoを使うことで、C#/.NETで開発ができる。VMが邪魔だと言う人は、Valaを試してほしい。GTK+はさまざまな言語で開発ができる。PythonやRubyで開発できるのは、「Cの関数なんか使いたくないよ」という「高水準な言語オタク」にとってはとても優れた長所である。C#やRubyでGNOMEアプリを開発してほしい。GNOMEのネットワーク・オブジェクト・モデルのアーキテクチャは、そうした人々のためにある。ウィジェットを、もっとコンポーネントを僕は、GTK+やBonoboなどに言えることとして、もっとウィジェットを用意して、その上でカスタムコントロールやコンポーネントをもっとたくさん用意すれば、面白いことに成るのではないかと思います。MS-Wordを簡単に作れるような「ワープロコンポーネント」を用意します。これによって、どんなプログラマでも簡単にコンポーネントを使うだけで、独自の自分のワープロソフトが作れるようになるでしょう。今のところ、Gnumericのコンポーネントのようなものはあるようですが、僕はもっとGNOMEでコンポーネントを用意し、「GUIアプリケーションがたくさん生まれるような土壌」を作り出しても良いと思います。AIHANAさんによるドキュメント和訳。Mikeforce::HomepageGTK+GTK+によるプログラミング。