编程开源技术交流,分享技术与知识

网站首页 > 开源技术 正文

用GTK+来创建一个带界面的C语言程序12——单选按钮

wxchong 2024-09-03 02:09:14 开源技术 8 ℃ 0 评论

本节示例将介绍如何创建和使用单选按钮控件,并利用它创建一个多项选一的窗口以及如何判断用户的选择。

每个单选按钮都是一组单选按钮的成员。当一个单选按钮被选中时,同一组中的所有其他单选按钮将被取消选中。GtkRadioButton是让用户从众多选项中做出选择的一种方式。

单选按钮部件使用gtk_radio_button_new()创建,如果这是组中的第一个单选按钮,则传递NULL作为参数。在后续调用中,您希望将此按钮添加到的组应该作为参数传递。如果您希望单选按钮上有一个文本标签,可以选择使用gtk_radio_button_new_with_label()。

或者,在向现有的单选按钮组添加小部件时,使用gtk_radio_button_new_from_widget()和已经分配了一个组的GtkRadioButton。还提供了方便的函数gtk_radio_button_new_with_label_from_widget()。

要检索分配给GtkRadioButton的组,请使用gtk_radio_button_get_group()。

要从一个组中删除一个GtkRadioButton,并使其成为一个新组的一部分,请使用gtk_radio_button_set_group()。

不需要释放组列表,因为每个GtkRadioButton在销毁时将删除自身及其列表项。

单选按钮(GtkRadioButton)控件经常用来表示程序中有多种情况只有一种情况的用户选择,此示例就创建了4个单选按钮代表颜色,用户只能选择其中一种颜色。

/*randiobutton.c*/

#include<gtk/gtk.h>

staticgchar *red="红色";

staticgchar *green="绿色";

staticgchar *yellow="黄色";

staticgchar *blue="蓝色";

voidon_radio_clicked(GtkWidget *radio, gintdata)

{

g_print("你选的颜色是:");

switch((int)data)

{

case1:

g_print("%s\n",red);

break;

case2:

g_print("%s\n",green);

break;

case3:

g_print("%s\n",yellow);

break;

case4:

g_print("%s\n",blue);

break;

default:

break;

}

}

intmain(intargc,char*argv[])

{

GtkWidget * window;

GtkWidget * frame;

GtkWidget * box;

GtkWidget * box1;

GtkWidget * button1;

GtkWidget * radio1;

GtkWidget * radio2;

GtkWidget * radio3;

GtkWidget * radio4;

GSList * group;

gchar * title ="单项选择窗口";

gtk_init(&argc, &argv);

window =gtk_window_new(GTK_WINDOW_TOPLEVEL);

gtk_window_set_title(GTK_WINDOW(window), title);

gtk_container_set_border_width(GTK_CONTAINER(window),10);

g_signal_connect(window,"destroy",G_CALLBACK(gtk_main_quit),NULL);

box =gtk_box_new(GTK_ORIENTATION_VERTICAL,0);

gtk_container_add(GTK_CONTAINER(window), box);

frame =gtk_frame_new("请选择一种颜色:");

gtk_frame_set_shadow_type(GTK_FRAME(frame), GTK_SHADOW_ETCHED_OUT);

gtk_box_pack_start(GTK_BOX(box), frame,FALSE,FALSE,5);

box1 =gtk_box_new(GTK_ORIENTATION_HORIZONTAL,0);

gtk_container_set_border_width(GTK_CONTAINER(box1),10);

gtk_container_add(GTK_CONTAINER(frame), box1);

radio1 =gtk_radio_button_new_with_label(NULL,red);//红色

g_signal_connect(G_OBJECT(radio1),"released",G_CALLBACK(on_radio_clicked), (gpointer)1);

gtk_box_pack_start(GTK_BOX(box1), radio1,FALSE,FALSE,5);

//创建多选按钮组

group =gtk_radio_button_get_group(GTK_RADIO_BUTTON(radio1));

radio2 =gtk_radio_button_new_with_label(group,green);//绿色

g_signal_connect(G_OBJECT(radio2),"released",G_CALLBACK(on_radio_clicked), (gpointer)2);

gtk_box_pack_start(GTK_BOX(box1), radio2,FALSE,FALSE,5);

group =gtk_radio_button_get_group(GTK_RADIO_BUTTON(radio2));

radio3 =gtk_radio_button_new_with_label(group,yellow);//绿色

g_signal_connect(G_OBJECT(radio3),"released",G_CALLBACK(on_radio_clicked), (gpointer)3);

gtk_box_pack_start(GTK_BOX(box1), radio3,FALSE,FALSE,5);

group =gtk_radio_button_get_group(GTK_RADIO_BUTTON(radio3));

radio4 =gtk_radio_button_new_with_label(group,blue);//绿色

g_signal_connect(G_OBJECT(radio4),"released",G_CALLBACK(on_radio_clicked), (gpointer)3);

gtk_box_pack_start(GTK_BOX(box1), radio4,FALSE,FALSE,5);

group =gtk_radio_button_get_group(GTK_RADIO_BUTTON(radio4));

button1 =gtk_button_new_with_label("确定");

g_signal_connect(G_OBJECT(button1),"clicked",G_CALLBACK(gtk_main_quit),NULL);

gtk_box_pack_start(GTK_BOX(box), button1,FALSE,FALSE,5);

gtk_widget_show_all(window);

gtk_main();

returnFALSE;

}

代码分析:

(1) 创建单选按钮

创建单选按钮有多个函数,每个函数的第一个参数都是单向链表(GSList)类型的,表示单选按钮所属的组,在创建一组中的第一个单选按钮时,可以将此参数设为NULL,而余下的单选按钮在创建时首先要用gtk_radio_button_get_group函数来取得第一个按钮所属的组,再用此组做参数来创建单选按钮。还可以用gtk_radio_button_set_group函数来设定单选按钮所属的组。

除了上述方式外,还可以用函数gtk_radio_button_new_from_widget来依次创建一组单选按钮,它的参数是前一单选按钮的控件指针,有兴趣的读者可以自己试一试。

(2) 单选按钮的信号

本例中为单选按钮的“clicked”信号加回调函数来显示用户的选择,这是最容易理解的一种方式,读者还可以用上节中的“released”信号来处理用户的选择。

单选按钮是继承自多选按钮的,单个的单选按钮和多选按钮在功能上是一样的,理解这一点对运用按钮类控件来编程非常重要。

Tags:

本文暂时没有评论,来添加一个吧(●'◡'●)

欢迎 发表评论:

最近发表
标签列表