![]() |
![]() |
![]() |
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)も使ってみたい。