C 如何检查GTK中是否选择了单选按钮

C 如何检查GTK中是否选择了单选按钮,c,radio-button,gtk,C,Radio Button,Gtk,我正试图用C语言在GTK中创建一个GUI。我想要有单选按钮,但我不知道如何确定选择了哪个 #include <glib.h> #include <gtk/gtk.h> static gboolean close_application( GtkWidget *widget, GdkEvent *event, gpointer

我正试图用C语言在GTK中创建一个GUI。我想要有单选按钮,但我不知道如何确定选择了哪个

#include <glib.h>
#include <gtk/gtk.h>

static gboolean close_application( GtkWidget *widget,
                                   GdkEvent  *event,
                                   gpointer   data )
{
  gtk_main_quit ();
  return FALSE;
}

static void btn_selected()
{
    //pop-up message; left empty for now   
}

int main( int   argc,
          char *argv[] )
{
    GtkWidget *window = NULL;
    GtkWidget *box1;
    GtkWidget *box2;
    GtkWidget *button;
    GtkWidget *separator;
    GSList *group;

    gtk_init (&argc, &argv);    

    window = gtk_window_new (GTK_WINDOW_TOPLEVEL);

    g_signal_connect (window, "delete-event",
              G_CALLBACK (close_application),
                      NULL);

    gtk_window_set_title (GTK_WINDOW (window), "radio buttons");
    gtk_container_set_border_width (GTK_CONTAINER (window), 0);

    box1 = gtk_vbox_new (FALSE, 0);
    gtk_container_add (GTK_CONTAINER (window), box1);
    gtk_widget_show (box1);

    box2 = gtk_vbox_new (FALSE, 10);
    gtk_container_set_border_width (GTK_CONTAINER (box2), 10);
    gtk_box_pack_start (GTK_BOX (box1), box2, TRUE, TRUE, 0);
    gtk_widget_show (box2);

    button = gtk_radio_button_new_with_label (NULL, "button1");
    gtk_box_pack_start (GTK_BOX (box2), button, TRUE, TRUE, 0);
    gtk_widget_show (button);

    group = gtk_radio_button_get_group (GTK_RADIO_BUTTON (button));
    button = gtk_radio_button_new_with_label (group, "button2");
    gtk_toggle_button_set_active (GTK_TOGGLE_BUTTON (button), TRUE);
    gtk_box_pack_start (GTK_BOX (box2), button, TRUE, TRUE, 0);
    gtk_widget_show (button);

    button = gtk_radio_button_new_with_label_from_widget (GTK_RADIO_BUTTON (button),
                                                      "button3");
    gtk_box_pack_start (GTK_BOX (box2), button, TRUE, TRUE, 0);
    gtk_widget_show (button);

    separator = gtk_hseparator_new ();
    gtk_box_pack_start (GTK_BOX (box1), separator, FALSE, TRUE, 0);
    gtk_widget_show (separator);

    box2 = gtk_vbox_new (FALSE, 10);
    gtk_container_set_border_width (GTK_CONTAINER (box2), 10);
    gtk_box_pack_start (GTK_BOX (box1), box2, FALSE, TRUE, 0);
    gtk_widget_show (box2);

    button = gtk_button_new_with_label ("close");
    g_signal_connect_swapped (button, "clicked",
                              G_CALLBACK (close_application),
                              window);
    gtk_box_pack_start (GTK_BOX (box2), button, TRUE, TRUE, 0);
    gtk_widget_set_can_default (button, TRUE);
    gtk_widget_grab_default (button);
    gtk_widget_show (button);

    //This button will call the btn_selected method when clicked
    button = gtk_button_new_with_label("selected");
    g_signal_connect(button,"clicked",G_CALLBACK (btn_selected),NULL);
    gtk_box_pack_start(GTK_BOX(box2),button,TRUE,TRUE,0);
    gtk_widget_show(button);

    gtk_widget_show (window);

    gtk_main ();

    return 0;
}
#包括
#包括
静态gboolean关闭应用程序(GtkWidget*小部件,
GdkEvent*事件,
gpointer数据)
{
gtk_main_quit();
返回FALSE;
}
所选静态无效btn_()
{
//弹出消息;暂时留空
}
int main(int argc,
字符*argv[]
{
GtkWidget*窗口=NULL;
GtkWidget*框1;
GtkWidget*第2框;
GtkWidget*按钮;
GtkWidget*分离器;
GSList*组;
gtk_init(&argc,&argv);
窗口=gtk_窗口_新建(gtk_窗口_顶层);
g_信号连接(窗口,“删除事件”,
G_回调(关闭_应用程序),
无效);
gtk_窗口设置标题(gtk_窗口(窗口),“单选按钮”);
gtk_容器_设置_边框_宽度(gtk_容器(窗口),0);
框1=gtk_vbox_新(假,0);
gtk_容器添加(gtk_容器(窗口),第1框);
gtk_widget_show(框1);
框2=gtk_vbox_新(假,10);
gtk_容器设置_边界_宽度(gtk_容器(框2),10);
gtk_-box_-pack_-start(gtk_-box(框1),框2,真,真,0);
gtk_widget_show(框2);
按钮=gtk_单选按钮_新按钮,带有标签(空,“按钮1”);
gtk_-box_-pack_启动(gtk_-box(框2),按钮,真,真,0);
gtk_小部件_显示(按钮);
组=gtk_单选按钮组(gtk_单选按钮(按钮));
按钮=gtk_单选按钮_新按钮,带有标签(组,“按钮2”);
gtk_切换_按钮设置_激活(gtk_切换_按钮(按钮),真);
gtk_-box_-pack_启动(gtk_-box(框2),按钮,真,真,0);
gtk_小部件_显示(按钮);
按钮=gtk_单选按钮(按钮)(gtk_单选按钮)(按钮),,
“按钮3”);
gtk_-box_-pack_启动(gtk_-box(框2),按钮,真,真,0);
gtk_小部件_显示(按钮);
分离器=gtk_hsepator_new();
gtk_-box_-pack_启动(gtk_-box(box1),分隔符,假,真,0);
gtk_widget_show(分隔符);
框2=gtk_vbox_新(假,10);
gtk_容器设置_边界_宽度(gtk_容器(框2),10);
gtk_-box_-pack_-start(gtk_-box(框1),框2,FALSE,TRUE,0);
gtk_widget_show(框2);
按钮=gtk_按钮_新建_,带_标签(“关闭”);
g_信号_连接_交换(按钮“点击”,
G_回调(关闭_应用程序),
窗口);
gtk_-box_-pack_启动(gtk_-box(框2),按钮,真,真,0);
gtk_widget_set_can_default(按钮,TRUE);
gtk_小部件_抓取_默认值(按钮);
gtk_小部件_显示(按钮);
//单击此按钮将调用btn_selected方法
按钮=gtk_按钮_新建_,带_标签(“选定”);
g_信号连接(按钮“点击”,g_回调(btn_选中),空);
gtk_-box_-pack_启动(gtk_-box(框2),按钮,真,真,0);
gtk_小部件_显示(按钮);
gtk_widget_show(窗口);
gtk_main();
返回0;
}
GUI出现时没有任何错误,我只是不知道如何检查选中了哪个单选按钮,以便执行操作。由于所有的按钮都命名为button,我不知道如何检查特定的按钮。我从gtk在线教程中获得了这段代码


如果您有任何想法,我们将不胜感激。

GtkRadioButton是GtkToggleButton的后代,因此您可以连接到“切换”信号或使用“活动”属性来更改按钮的状态