允许在GTK中同时检查两个单选按钮

时间:2014-05-16 01:34:00

标签: c radio-button gtk

我正在尝试开发一个具有单选按钮的GUI。单选按钮是在方法从文本文件中读取按钮的名称后创建的,然后是按钮的名称。

创建按钮并正确显示。我的问题是它们都是同时被选中的。你怎么得到它只允许同时检查?

static void sel_sets_prac()
{
    GtkWidget *window,*button,*vbox,*label,*frame;
    window=gtk_window_new(GTK_WINDOW_TOPLEVEL);
    g_signal_connect(window,"delete-event",G_CALLBACK(gtk_main_quit),NULL);
    gtk_window_set_title(GTK_WINDOW(window), "ZHONG FC - Sets de Práctica");

    vbox = gtk_vbox_new(FALSE,3);

    frame = gtk_frame_new("Sets de Práctica");
    label = gtk_label_new("Escoge el set que desea practicar: ");
    gtk_container_add(GTK_CONTAINER(frame), label);
    gtk_box_pack_start(GTK_BOX(vbox),frame,TRUE,TRUE,0);

    //These variables are from other methods; I am pretty sure the problem is not here
    int num_sets = get_number_sets();
    char ** set_names;
    set_names = get_set_names(num_sets);

    GtkWidget *sets_select[num_sets];

    //I am guessing the problem is here, but I don't have a clue what to do
    int i;
    for(i = 0; i < num_sets; i++) {
        sets_select[i] = gtk_radio_button_new_with_label(NULL, set_names[i]);
        gtk_box_pack_start(GTK_BOX(vbox),sets_select[i],TRUE,TRUE,0);
    }

    gtk_container_set_border_width(GTK_CONTAINER(window), 50);
    gtk_container_add(GTK_CONTAINER(window),vbox);

    gtk_widget_show_all(window);
    gtk_main();
}

我无法弄清楚为什么允许同时选择多个按钮。请帮忙。

1 个答案:

答案 0 :(得分:0)

您的按钮位于不同的列表中,因此GTK不知道一次只允许其中一个按钮。你的问题是gtk_radio_button_new_with_label的NULL第一个参数;它需要指定一个按钮列表,以便将所有单选按钮视为一个组。你需要这样的东西(改编自this tutorial):

GtkWidget * button = gtk_radio_button_new_with_label (NULL, "button1");
GSList * group = gtk_radio_button_group (GTK_RADIO_BUTTON (button));
GtkWidget * button2 = gtk_radio_button_new_with_label(group, "button2");