![]() |
![]() |
![]() |
CheckButtonウィジェット
チェックボタン・ウィジェットについて触れてみる。 当然、チェックを入れる、入れないで、処理を分岐させたい。 マニュアルを見てみる。
あれ!?Synopsis(概要)に4項目しか無く、しかもチェックに関する物が見当たらない。 以前、ComboBoxTextにデフォルト文字を入れるのに、すぐ上位のComboBoxを使った。 という事は、今回はToggleButtonを参照してみる。
get_activeを発見。 gboolean型なので、チェックが入っていればTRUE、入っていなければFALSEを返す。 早速使ってみる。
|
#include <gtk/gtk.h> GtkWidget *checkbutton1; GtkWidget *checkbutton2; GtkWidget *label1; GtkWidget *label2; //チェックが入っていればラベルをTRUE、入っていなければFALSEと表示
static void cb_button_clicked (GtkWidget *button, gpointer user_data){ gboolean flag1; gboolean flag2; //チェックボタンがactiveかどうかをget
flag1 = gtk_toggle_button_get_active(GTK_TOGGLE_BUTTON(checkbutton1));flag2 = gtk_toggle_button_get_active(GTK_TOGGLE_BUTTON(checkbutton2)); if( flag1 == TRUE ){ gtk_label_set_text(GTK_LABEL(label1), "CheckButton1:TRUE"); } else{ gtk_label_set_text(GTK_LABEL(label1), "CheckButton1:FALSE"); } if( flag2 == TRUE ){ gtk_label_set_text(GTK_LABEL(label2), "CheckButton2:TRUE"); } else{ gtk_label_set_text(GTK_LABEL(label2), "CheckButton2:FALSE"); } } int main( int argc, char *argv[]) { GtkWidget *window; GtkWidget *vbox; GtkWidget *button; gtk_init(&argc, &argv); window = gtk_window_new(GTK_WINDOW_TOPLEVEL); gtk_widget_set_size_request(window, 300, 200); gtk_container_set_border_width(GTK_CONTAINER(window), 10); vbox = gtk_box_new(GTK_ORIENTATION_VERTICAL, 2); gtk_container_add(GTK_CONTAINER(window), vbox); checkbutton1 = gtk_check_button_new_with_label("CheckButton1"); gtk_box_pack_start(GTK_BOX(vbox), checkbutton1, TRUE, TRUE, 0); checkbutton2 = gtk_check_button_new_with_label("CheckButton2"); gtk_box_pack_start(GTK_BOX(vbox), checkbutton2, TRUE, TRUE, 0); button = gtk_button_new_with_label("Output"); gtk_box_pack_start(GTK_BOX(vbox), button, TRUE, TRUE, 0); label1 = gtk_label_new("CheckButton1:"); gtk_box_pack_start(GTK_BOX(vbox), label1, TRUE, TRUE, 0); label2 = gtk_label_new("CheckButton2:"); gtk_box_pack_start(GTK_BOX(vbox), label2, TRUE, TRUE, 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; } |
チェックを入れずに「Output」ボタンをクリック。
CheckButton1のみにチェックを入れる
CheckButton2のみにチェックを入れる
念のため、両方にチェックを入れてみる。
これで、チェックボタンの情報取得ができるようになった。
ボタンの装飾
ボタン・ウィジェットだが、中にイメージとラベルを格納できるらしい。 試しにやってみる。
|
#include <gtk/gtk.h> int main(int argc, char *argv[]) { GtkWidget *window; GtkWidget *button; GtkWidget *label; GtkWidget *image; GtkWidget *hbox; gtk_init (&argc, &argv); window = gtk_window_new(GTK_WINDOW_TOPLEVEL); gtk_window_set_title(GTK_WINDOW (window), "Image and Label of Button"); gtk_widget_set_size_request(window, 300, 200); gtk_container_set_border_width(GTK_CONTAINER (window), 10); //ボタンを作成
button = gtk_button_new(); //画像とラベルのためのボックスを作成
hbox = gtk_box_new(GTK_ORIENTATION_HORIZONTAL, 0);gtk_container_set_border_width(GTK_CONTAINER(hbox), 2); //ボタンのための画像を作成
image = gtk_image_new_from_file("logo.png"); //ボタンのためのラベルを作成
label = gtk_label_new("ButtonLabel"); //画像とラベルをボックスにパッキング
gtk_box_pack_start(GTK_BOX(hbox), image, FALSE, FALSE, 3);gtk_box_pack_start(GTK_BOX(hbox), label, FALSE, FALSE, 3); gtk_container_add(GTK_CONTAINER(button), hbox); 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; } |
左にイメージ、右にラベルを格納してみた。 サンプルは無意味だが、使いようによっては、 「ファイルを開く」、「保存」などで、視覚的にボタンの役割を解りやすくする事ができる。