您的位置:首页 > 编程语言 > Go语言

GTK Gossip: GtkCheckButton 與 GtkRadioButton

2010-12-10 10:09 323 查看

取鈕(Check Button)是可以進行選項複選的元件,單選鈕(Radio
Button)是只能進行選項單選的元件,在GTK中分別使用GtkCheckButton
與GtkRadioButton來負責,它們是雙態按鈕GtkToggleButton的子類:

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()函式:

GtkWidget *gtk_radio_button_new_with_label(GSList *group, const gchar *label);

第一次建立GtkRadioButton時,GSList的參數直接設為NULL即可,接著使用
gtk_radio_button_get_group()獲得按鈕群組;

GSList *gtk_radio_button_get_group( GtkRadioButton *radio_button);

例如以下的程式碼會先建立一個GtkRadioButton,接著從已建立的GtkRadioButton獲得按鈕群組,然後再用以建立另一個GtkRadioButton,如此兩個單選鈕就屬於同一個群組,同時間只能選取一個:

GtkWidget *radio1 = gtk_radio_button_new_with_label(NULL, "Linux");

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 *radio1 = gtk_radio_button_new_with_label(NULL, "Linux");

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;

}


執行的畫面如下所示:

内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: