ラジオボタン

2010年2月11日

ファイル

11-radio.tar.gz

内容

ラジオボタンを作ります。ここでは、ラジオボタン用の枠を作るために、GtkFrame を使います。

	frame = gtk_frame_new("radio button");
	gtk_frame_set_shadow_type(GTK_FRAME(frame), GTK_SHADOW_ETCHED_IN);
	gtk_box_pack_start(GTK_BOX(vbox), frame, TRUE, TRUE, 2);

gtk_radio_button_new_with_label_from_widget() でラジオボタンを作ります。

	r1 = gtk_radio_button_new_with_label_from_widget(
	  NULL, "radio 1");
	r2 = gtk_radio_button_new_with_label_from_widget(
	  GTK_RADIO_BUTTON(r1), "radio 2");
	r3 = gtk_radio_button_new_with_label_from_widget(
	  GTK_RADIO_BUTTON(r1), "radio 3");

第 1 引数で r2, r3 を r1 に関連付けしています。

ラジオボタンのチェック用にボタンをつけています。

	button = gtk_button_new_with_label("Check");
	gtk_box_pack_start(GTK_BOX(vbox), button, FALSE, FALSE, 0);

	g_signal_connect(button, "clicked", G_CALLBACK(buttonClicked), group);

クリックイベントのコールバック関数にはラジオボタンのグループを渡しています。

	group = gtk_radio_button_get_group(GTK_RADIO_BUTTON(r1));

グループはラジオボタンのリストになっており、その各要素を gtk_toggle_button_get_active() でチェックすることによって、どのボタンが選択されているのかがわかります。

void buttonClicked(GtkWidget *widget, GSList *list)
{
	GtkWidget *w;
	int i;

	for(i = 0; i < g_slist_length(list); i++){
		w = g_slist_nth_data(list, i);
		if(gtk_toggle_button_get_active(GTK_TOGGLE_BUTTON(w))){
			printf("%d\n", 3 - i);
			break;
		}
	}
}

GTK+ プログラミング 目次へ