ボタン・ウィジェットの配置


前章で作成したウィンドウに、ボタンを配置してみる。

#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$ ▋

ウィンドウ上のウィジェットを配置するには、複数ウィジェットを格子状に配置して行くらしい。 次章では、複数ウィジェットを扱ってみたい。


前章  | 目次 |  次章



トップ



/