核 取鈕(Check Button)是可以進行選項複選的元件,單選鈕(Radio Button)是只能進行選項單選的元件,在GTK中分別使用GtkCheckButton 與GtkRadioButton來負責,它們是雙態按鈕GtkToggleButton的子類:
+----GtkCheckButton
+----GtkRadioButton
建立核取鈕或單選鈕的方式與建立一般按鈕類似,您可以使用gtk_check_button_new()、 gtk_check_button_new_with_label()、gtk_check_button_new_with_mnemonic(),來 建立核取鈕,GtkRadioButton必須使用按鈕群組(Button Group)來加以群組,來表示哪些單選項為一個群組,彼此互斥,同時間只能選擇一個,例如 gtk_radio_button_new_with_label()函式:
第一次建立GtkRadioButton時,GSList的參數直接設為NULL即可,接著使用 gtk_radio_button_get_group()獲得按鈕群組;
例如以下的程式碼會先建立一個GtkRadioButton,接著從已建立的GtkRadioButton獲得按鈕群組,然後再用以建立另一個GtkRadioButton,如此兩個單選鈕就屬於同一個群組,同時間只能選取一個:
GtkWidget *radio2 = gtk_radio_button_new_with_label(
gtk_radio_button_get_group(GTK_RADIO_BUTTON(radio1)) , "Windows");
您也可以使用gtk_radio_button_new_with_label_from_widget(),這可以省略gtk_radio_button_get_group()這道手續,例如:
GtkWidget *radio2 = gtk_radio_button_new_with_label_from_widget(
GTK_RADIO_BUTTON(radio1) , "Windows");
由於GtkCheckButton與GtkRadioButton都屬於GtkToggleButton的子類,如果要設定按鈕為選取狀態,則直接使用gtk_toggle_button_set_active()函式即可。
下面的程式為 GtkCheckButton與GtkRadioButton 配置的基本示範:
- check_radio_demo.c
#include <gtk/gtk.h>
GtkWidget* checkButtonsNew() {
GtkWidget *check1, *check2;
GtkWidget *vbox;
check1 = gtk_check_button_new_with_label("Java is good!");
check2 = gtk_check_button_new_with_label("C++ is good!");
vbox = gtk_vbox_new(TRUE, 5);
gtk_box_pack_start(GTK_BOX(vbox), check1, TRUE, TRUE, 5);
gtk_box_pack_start(GTK_BOX(vbox), check2, TRUE, TRUE, 5);
return vbox;
}
GtkWidget* radioButtonsNew() {
GtkWidget *radio1, *radio2, *radio3;
GtkWidget *vbox;
radio1 = gtk_radio_button_new_with_label(NULL, "Linux");
radio2 = gtk_radio_button_new_with_label_from_widget(
GTK_RADIO_BUTTON(radio1) , "Windows");
radio3 = gtk_radio_button_new_with_label_from_widget(
GTK_RADIO_BUTTON(radio1) , "Mac");
vbox = gtk_vbox_new(TRUE, 5);
gtk_box_pack_start(GTK_BOX(vbox), radio1, TRUE, TRUE, 5);
gtk_box_pack_start(GTK_BOX(vbox), radio2, TRUE, TRUE, 5);
gtk_box_pack_start(GTK_BOX(vbox), radio3, TRUE, TRUE, 5);
return vbox;
}
int main(int argc, char *argv[]) {
GtkWidget *window;
GtkWidget *vbox;
GtkWidget *frame;
gtk_init(&argc, &argv);
window = gtk_window_new(GTK_WINDOW_TOPLEVEL);
gtk_window_set_title(GTK_WINDOW(window), "GtkCheckButton & GtkRadioButton");
gtk_window_set_default_size(GTK_WINDOW(window), 400, 50);
vbox = gtk_vbox_new(FALSE, 5);
gtk_box_pack_start(GTK_BOX(vbox), checkButtonsNew(), TRUE, TRUE, 5);
frame = gtk_frame_new("Favorite OS");
gtk_container_add(GTK_CONTAINER(frame), radioButtonsNew());
gtk_box_pack_start(GTK_BOX(vbox), frame, TRUE, TRUE, 5);
gtk_container_add(GTK_CONTAINER(window), vbox);
g_signal_connect(GTK_OBJECT(window), "destroy",
G_CALLBACK(gtk_main_quit), NULL);
gtk_widget_show_all(window);
gtk_main();
return 0;
}
執行的畫面如下所示: