vboxウィジェット


ウィンドウ上にウィジェットを格子状に配置する。 今回はvboxを使って、上にイメージ、下にボタンを配置してみる。

#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);
  {
    //縦にウィジェットを配置するvbox(Vertical BOX)ウィジェットを指定
    GtkWidget *vbox;
    
    //vboxを作成(2は子ウィジェットのピクセル間隔)
    vbox = gtk_box_new (GTK_ORIENTATION_VERTICAL, 2);
    
    //vboxをウィンドウに配置
    gtk_container_add(GTK_CONTAINER(window), vbox);
    {
      GtkWidget *image;
      
      GtkWidget *button;
      
      //ファイルから画像を読み込んでイメージの作成
      image = gtk_image_new_from_file("./homepage/chap04/goshikinuma.jpg");
      
      //イメージをvboxに配置
      gtk_box_pack_start(GTK_BOX(vbox), image, TRUE, TRUE, 0);
      
      button = gtk_button_new_with_label("Quit");
      
      //ボタンをvboxに配置
      gtk_box_pack_start(GTK_BOX(vbox), button, FALSE, FALSE, 0);
      
      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;
}


DVDカム1号機で撮った写真だけに、画質が…と、話をそらす前に、 ウィンドウ幅を300x200にしたのに、イメージの画像ファイルにサイズが修正されている。 この対策として、イメージにスクロールバーを付けてみる。

#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 *vbox;
    
    vbox = gtk_box_new (GTK_ORIENTATION_VERTICAL, 2);
    
    gtk_container_add(GTK_CONTAINER(window), vbox);
    {
      //スクロールバー付きウィンドウの指定
      GtkWidget *scroll_window;
      
      GtkWidget *button;
      
      //スクロールバー付きウィンドウの作成
      scroll_window = gtk_scrolled_window_new(NULL, NULL);
      
      //スクロールバー付きウィンドウをvboxに配置
      gtk_box_pack_start(GTK_BOX(vbox), scroll_window, TRUE, TRUE, 0);
      
      //スクロールバーの表示設定
      gtk_scrolled_window_set_policy(GTK_SCROLLED_WINDOW(scroll_window), GTK_POLICY_AUTOMATIC, GTK_POLICY_AUTOMATIC);
      {
        GtkWidget *image;
        
        image = gtk_image_new_from_file("./homepage/chap04/goshikinuma.jpg");
        
        //イメージをスクロールバー付きウィンドウに配置
        gtk_scrolled_window_add_with_viewport(GTK_SCROLLED_WINDOW(scroll_window), image);
        
      }
      button = gtk_button_new_with_label("Quit");
      
      gtk_box_pack_start(GTK_BOX(vbox), button, FALSE, FALSE, 0);
      
      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;
}


イメージが指定したウィンドウのサイズに収まり、スクロールバーで未表示部分が見られるようになった。
さて、gtk_box_pack_startに引数が5つ有るので、確認してみる。
gtk_box_pack_start(GtkBox *box, GtkWidget *child, gboolean expand, gboolean fill, guint padding);
gbooleanはTRUE or FALSE、guintはunsigned intを指定する。
*box:パッキングするボックス
*child:配置するウィジェット
expand:ボックスを与えられた領域一杯に広げるか?
fill:ウィジェットを与えられた領域一杯に広げるか?
padding:ボックス両端のスペース
次章では、ウィジェットを横に配列するhbox(Horizontal BOX)も使ってみたい。


前章  | 目次 |  次章



トップ



/