C GTK3-radiobutton:每次切换按钮时调用回调两次

C GTK3-radiobutton:每次切换按钮时调用回调两次,c,callback,radio-button,gtk3,C,Callback,Radio Button,Gtk3,我正试着用gtk3无线电按钮来跟着狂吠。问题是我注意到每次单击按钮时回调函数都会被调用两次。 我的问题是,当我点击一个单选按钮时,我为什么以及如何更改回调调用一次 从切换按钮继承的切换信号在停用和激活时都会触发。当您选择单选按钮时,先前选择的按钮在第一次回调时被停用,而新按下的按钮激活第二次回调 如果只想过滤激活,请使用gtk_toggle_button_get_active在回调中获取切换按钮的状态 根据以下文件: #include <gtk/gtk.h> static void

我正试着用gtk3无线电按钮来跟着狂吠。问题是我注意到每次单击按钮时回调函数都会被调用两次。 我的问题是,当我点击一个单选按钮时,我为什么以及如何更改回调调用一次


从切换按钮继承的切换信号在停用和激活时都会触发。当您选择单选按钮时,先前选择的按钮在第一次回调时被停用,而新按下的按钮激活第二次回调

如果只想过滤激活,请使用gtk_toggle_button_get_active在回调中获取切换按钮的状态

根据以下文件:

#include <gtk/gtk.h>

static void foo(GtkWidget *widget, gpointer data)
{
    char *id_radio = (char*)data;
    g_print("%s\n", id_radio);
}

int main(int argc, char *argv[])
{
    gtk_init(&argc, & argv);

    GtkWidget *radio_1, *radio_2, *radio_3, *vbox, *window;

    radio_1 = gtk_radio_button_new_with_label(NULL, "Radio 01");
    radio_2 = gtk_radio_button_new_with_label_from_widget(GTK_RADIO_BUTTON(radio_1), "Radio 02");
    radio_3 = gtk_radio_button_new_with_label_from_widget(GTK_RADIO_BUTTON(radio_1), "Radio 03");
    vbox = gtk_box_new(GTK_ORIENTATION_VERTICAL, 0);
    window = gtk_window_new(GTK_WINDOW_TOPLEVEL);

    g_signal_connect(window, "delete-event", G_CALLBACK(gtk_main_quit), NULL);                      
    g_signal_connect(GTK_TOGGLE_BUTTON(radio_1), "toggled", G_CALLBACK(foo), (gpointer)"1");
    g_signal_connect(GTK_TOGGLE_BUTTON(radio_2), "toggled", G_CALLBACK(foo), (gpointer)"2");
    g_signal_connect(GTK_TOGGLE_BUTTON(radio_3), "toggled", G_CALLBACK(foo), (gpointer)"3");

    gtk_box_pack_start(GTK_BOX(vbox), radio_1, 1, 1, 0);
    gtk_box_pack_start(GTK_BOX(vbox), radio_2, 1, 1, 0);
    gtk_box_pack_start(GTK_BOX(vbox), radio_3, 1, 1, 0);
    gtk_container_add(GTK_CONTAINER(window), vbox);

    gtk_widget_show_all(window);
    gtk_main();
    return 0;
}