TA的每日心情 | 奋斗 2015-10-16 12:17 |
---|
签到天数: 401 天 连续签到: 1 天 [LV.9]以坛为家II
|
楼主 |
发表于 2013-9-14 00:36:03
|
显示全部楼层
本帖最后由 白浪 于 2013-9-14 01:17 编辑
选择按钮就是我们通常来说的单选框。从外观来看,选择按钮(GtkRaddioButton)很像检查按钮。因为选
择按钮是从检查按钮派生而来的。选择按钮和检查按钮的区别不大,对选择按钮来说,任何时候在一组按
钮只可以选择一个按钮,点击一个按钮就释放前面选择的按钮,使点击的按钮成为被选择的按钮。
可以用gtk_radio_hutton_new_with_label函数建立带标号的GtkRadioButton,或者用gtk_radio_button_new
函数建立不带标号的GtkRadioButton。建立GtkRadioButton只完成了工作的一半。因为选择按钮必须和组
联系起来,使得任何时候只能选择一个按钮。
以下代码是创建了3个选择按钮,并将3个选择按钮加入了同一个组中,使得3个选择按钮在任何时候只能选择一个按钮。
- <P> #include <gtk/gtk.h></P>
- <P> </P>
- <P>int main (void)
- {
- GtkWidget *window = NULL;
- GtkWidget *button1 = NULL;
- GtkWidget *button2 = NULL;
- GtkWidget *button3 = NULL;
- GtkWidget *fixed = NULL;
- GSList *group=NULL;
- // 初始化 GTK
- gtk_init(NULL, NULL);
- // 建立一個新的 GtkWindow
- window = gtk_window_new (GTK_WINDOW_TOPLEVEL);
- fixed=gtk_fixed_new();
- //建立一个新的button
- //button = gtk_button_new ();
- button1 = gtk_radio_button_new_with_label (group,"check button1");
- group = gtk_radio_button_get_group(GTK_RADIO_BUTTON(button1));
- button2 = gtk_radio_button_new_with_label (group,"check button2");
- group = gtk_radio_button_get_group(GTK_RADIO_BUTTON(button2));
- button3 = gtk_radio_button_new_with_label (group,"check button3");</P>
- <P> gtk_fixed_put(GTK_FIXED(fixed),button1,40,20);
- gtk_fixed_put(GTK_FIXED(fixed),button2,40,40);
- gtk_fixed_put(GTK_FIXED(fixed),button3,40,60);
- // 設置標題
- gtk_window_set_title (GTK_WINDOW (window), "Window");
- // 設置默認大小
- gtk_window_set_default_size (GTK_WINDOW (window), 300, 200);
- gtk_container_add(GTK_CONTAINER(window),fixed);
- // 處理 "destroy" 信號,當窗口被關閉時退出程序
- g_signal_connect (window, "destroy", G_CALLBACK (gtk_main_quit), NULL);
- // g_signal_connect (button, "toggled", G_CALLBACK (button_toggled), NULL);
- // 顯示窗口和所有子組件
- gtk_widget_show_all (window);
- // 開始事件循環
- gtk_main ();
- // gtk_main_quit 會導致 gtk_main 退出,於是程序結束
- return 0;
- }
- </P>
复制代码 每添加一个选择按钮后都得调用一次gtk_radio_button_get_group函数取得组,然后继续添加按钮。如果不这样
做将导致不可预期的结果。
以下代码是加了回调之后的代码,就不解释了哈 有问题就提问哈- #include <gtk/gtk.h>
- void button_toggled(GtkWidget *widget,gpointer *data)
- {
- //在终端中打印
- if(gtk_toggle_button_get_active (GTK_TOGGLE_BUTTON(widget))==TRUE)
- {
- if(data==1)g_printf("button1 checked!!!\n");
- else if(data==2)g_printf("button2 checked!!!\n");
- else if(data==3)g_printf("button3 checked!!!\n");
- }
- }
- int main (void)
- {
- GtkWidget *window = NULL;
- GtkWidget *button1 = NULL;
- GtkWidget *button2 = NULL;
- GtkWidget *button3 = NULL;
- GtkWidget *fixed = NULL;
- GSList *group=NULL;
- // 初始化 GTK
- gtk_init(NULL, NULL);
- // 建立一個新的 GtkWindow
- window = gtk_window_new (GTK_WINDOW_TOPLEVEL);
- fixed=gtk_fixed_new();
- //建立一个新的button
- //button = gtk_button_new ();
- button1 = gtk_radio_button_new_with_label (group,"check button1");
- group = gtk_radio_button_get_group(GTK_RADIO_BUTTON(button1));
- button2 = gtk_radio_button_new_with_label (group,"check button2");
- group = gtk_radio_button_get_group(GTK_RADIO_BUTTON(button2));
- button3 = gtk_radio_button_new_with_label (group,"check button3");
- gtk_fixed_put(GTK_FIXED(fixed),button1,40,20);
- gtk_fixed_put(GTK_FIXED(fixed),button2,40,40);
- gtk_fixed_put(GTK_FIXED(fixed),button3,40,60);
- // 設置標題
- gtk_window_set_title (GTK_WINDOW (window), "Window");
- // 設置默認大小
- gtk_window_set_default_size (GTK_WINDOW (window), 300, 200);
- gtk_container_add(GTK_CONTAINER(window),fixed);
- // 處理 "destroy" 信號,當窗口被關閉時退出程序
- g_signal_connect (window, "destroy", G_CALLBACK (gtk_main_quit), NULL);
- g_signal_connect (button1, "toggled", G_CALLBACK (button_toggled), (gpointer)1);
- g_signal_connect (button2, "toggled", G_CALLBACK (button_toggled), (gpointer)2);
- g_signal_connect (button3, "toggled", G_CALLBACK (button_toggled), (gpointer)3);
- // 顯示窗口和所有子組件
- gtk_widget_show_all (window);
- // 開始事件循環
- gtk_main ();
- // gtk_main_quit 會導致 gtk_main 退出,於是程序結束
- return 0;
- }
复制代码 效果如下图:
作业:
将控制台打印的内容以label的形式显示在窗口上
|
本帖子中包含更多资源
您需要 登录 才可以下载或查看,没有帐号?马上加入
x
|