topページ / gccページ / GTK+

GTK+ を使う

GTKを使ったプログラミングのリメイク版です。以前のGTKは内容が古いので、新しくしました。

簡単のためにgladeを使ったプログラミングとなっています。

Gladeを使った簡単なプログラム

Gladeでレイアウト作成

Gladeを起動すると、こんな画面になります。

まず、プロジェクトのオプションを設定します。

プロジェクト・ファイルの形式をGtkBuilderにします。

使用するツールキットの最低バージョンを上げると、使えるオブジェクトが増えます。

設定が終了すると、オブジェクトを配置して画面を作ります。左のツールアイコンを選んでオブジェクトを配置します。はじめは赤で囲んだウインドウを配置します。

下は、ウインドウにボタンだけを配置した図です。

配置し終わったら、プロパティ設定をします。

window1を選択し、ウインドウのプロパティを設定します。プロパティ項目は色々あるので、ここではシグナル設定のみをします。ウインドウが閉じたときに、gtkプログラムを終了するコマンド、gtk_main_quit()が実行されるように設定します。

ボタンが押されたときのシグナル設定もしておきます。ボタンクリックで、on_button1_clicked()が実行されるようにします。この関数は標準関数ではないので、後で自分で作る必要があります。

ここまでできたら、test_proglam.gladeと名前をつけて、保存します。

ソースコードの記述

#include <gtk/gtk.h>

/*
 * コールバック関数。
 * GtkBuilderから呼び出す場合、G_MODULE_EXPORTが必要。
 */
G_MODULE_EXPORT void on_button1_clicked(GtkButton *button, gpointer user_data){
	/* 終了する。 */
	gtk_main_quit();
}

int main(int argc, char* argv[]){
	GtkBuilder* builder; /* GtkBuilderオブジェクト。gladeファイルの設定 = GtkBuilderオブジェクトと考えてOK */
	GtkWidget* window;   /* GtkWidgetオブジェクト */

	/* GTKを開始する */
	gtk_init(&argc, &argv);

	/* GtkBuilderオブジェクトの取得 */
	builder = gtk_builder_new();

	/* gladeファイルの読み込み */
	gtk_builder_add_from_file(builder, "test_program.glade", NULL);

	/* 
	 * GtkBuilderオブジェクトからGtkWidgetを取得する。
	 * GtkWidgetはGTKの様々なオブジェクトとして使われる。
	 * 今回、ウインドウやウインドウの上にあるオブジェクトを表示するため、
	 * ウインドウのGtkWidgetを取得する必要がある。
	 * なお、gtk_builder_get_object()で取得できるのはGObjectであるため、
	 * GtkWidgetにキャストしている。
	 */
	window = (GtkWidget*)gtk_builder_get_object(builder, "window1");

	/* ウインドウとその上にあるオブジェクトを表示する。 */
	gtk_widget_show_all(window);

	/*
	 * シグナル設定した関数を有効にする。
	 * gladeで設定したシグナルは、
	 * 1. ウインドウを閉じたときにgtk_main_quit()を実行する。
	 * 2. ボタンをクリックした時にon_button1_clicked()を実行する。
	 * である。
	 * gtk_main_quit()はもともとある関数だが、
	 * on_button1_clicked()は自分で新たに作成しなければならない。
	 */
	gtk_builder_connect_signals(builder, NULL);

	/* GTKのイベントループ */
	gtk_main();

	return 0;
}

program.c という名前にして、コンパイルします。

gcc -o program program.c `pkg-config --cflags --libs gtk+-2.0 gmodule-2.0`

pkg-configは指定されたパッケージのincludeファイルのディレクトリ指定やリンクを行ってくれます。

「program」とtest_program.gladeは同じディレクトリに置き、実行します。

実行すると、ボタン1つだけのウインドウが表示されます。ボタンを押したり、ウインドウを閉じたりすると、プログラムが終了します。