![]() |
![]() |
![]() |
ボタン・ウィジェットの配置
前章で作成したウィンドウに、ボタンを配置してみる。
|
#include <gtk/gtk.h> int main(int argc, char** argv) { GtkWidget *window; gtk_init(&argc,&argv); window = gtk_window_new(GTK_WINDOW_TOPLEVEL); gtk_widget_set_size_request(window, 300, 200); { //子ウィジェットにbuttonを指定
GtkWidget *button; //ボタンのラベル名を指定して作成
button = gtk_button_new_with_label("Button"); //ボタンをウィンドウに配置
gtk_container_add(GTK_CONTAINER(window), button);} g_signal_connect(window, "destroy", G_CALLBACK(gtk_main_quit), NULL); //ウィンドウ上の全てのウィジェットを表示
gtk_widget_show_all(window);gtk_main(); return 0; } |
結果

ウィンドウ全体にボタンが配置された。
ボタン・ウィジェットでウィンドウを閉じる
続いて、ボタンをクリックすると、ウィンドウを閉じるように設定してみる。
|
#include <gtk/gtk.h> //ボタンがクリックされた時に呼び出される関数
static void cb_button_clicked (GtkWidget *button, gpointer user_data){ //GTK+のメイン関数ループを終了する
gtk_main_quit();} int main(int argc, char** argv) { GtkWidget *window; gtk_init(&argc,&argv); window = gtk_window_new(GTK_WINDOW_TOPLEVEL); gtk_widget_set_size_request(window, 300, 200); { GtkWidget *button; //ボタンのラベルを変えてみる
button = gtk_button_new_with_label("Quit");gtk_container_add(GTK_CONTAINER(window), button); //ボタンがクリックされた時に呼び出される関数を設定
g_signal_connect(G_OBJECT(button), "clicked", G_CALLBACK(cb_button_clicked), NULL);} g_signal_connect(window, "destroy", G_CALLBACK(gtk_main_quit), NULL); gtk_widget_show_all(window); gtk_main(); return 0; } |
結果
ボタンをクリックすると、ウィンドウが閉じられるようになる。
ボタン・ウィジェットに枠を付ける
しかし、ウィンドウ全体がボタンでは恰好がつかない。 好きな場所に好きなサイズで配置したいが、簡単には行かないようである。 見た目だけ良くするため、ボタンをウィンドウの中央に縮小してみた。
|
#include <gtk/gtk.h> static void cb_button_clicked (GtkWidget *button, gpointer user_data) { gtk_main_quit(); } int main(int argc, char** argv) { GtkWidget *window; gtk_init(&argc,&argv); window = gtk_window_new(GTK_WINDOW_TOPLEVEL); gtk_widget_set_size_request(window, 300, 200); { GtkWidget *button; button = gtk_button_new_with_label("Quit"); gtk_container_add(GTK_CONTAINER(window), button); //ボタンの枠を80ピクセルに指定
gtk_container_set_border_width(GTK_CONTAINER(button), 80);g_signal_connect(G_OBJECT(button), "clicked", G_CALLBACK(cb_button_clicked), NULL); } g_signal_connect(window, "destroy", G_CALLBACK(gtk_main_quit), NULL); gtk_widget_show_all(window); gtk_main(); return 0; } |
結果

これで、ボタンの上下左右に80ピクセルの枠ができ、ボタンのサイズが140x40になった。
標準出力でモニターしてみる
端末で動作を確認してみる。
|
#include <gtk/gtk.h> static void cb_button_clicked (GtkWidget *button, gpointer user_data) { printf( "GTK+終了\n" );
gtk_main_quit();} int main(int argc, char** argv) { GtkWidget *window; gtk_init(&argc,&argv); window = gtk_window_new(GTK_WINDOW_TOPLEVEL); gtk_widget_set_size_request(window, 300, 200); { GtkWidget *button; button = gtk_button_new_with_label("Quit"); gtk_container_add(GTK_CONTAINER(window), button); gtk_container_set_border_width(GTK_CONTAINER(button), 80); g_signal_connect(G_OBJECT(button), "clicked", G_CALLBACK(cb_button_clicked), NULL); } g_signal_connect(window, "destroy", G_CALLBACK(gtk_main_quit), NULL); gtk_widget_show_all(window); printf( "GTK+起動\n" );
gtk_main(); return 0; } |
user@machine:~/gtk$ ./test GTK+起動 ▋ |
Quitボタンをクリックしてウィンドウを閉じる。
user@machine:~/gtk$ ./test GTK+起動 GTK+終了 user@machine:~/gtk$ ▋ |
ウィンドウ上のウィジェットを配置するには、複数ウィジェットを格子状に配置して行くらしい。 次章では、複数ウィジェットを扱ってみたい。