分享一下我老师大神的人工智能教程!零基础,通俗易懂!http://blog.csdn.net/jiangjunshow
也欢迎大家转载本篇文章。分享知识,造福人民,实现我们中华民族伟大复兴!
如何在linux下用gtk开发图形界面应用程序
最近爱上了Linux,尤其是在读了我博客转载到一篇文章之后,更加的决定这辈子要和linux做永远的情人。正好博主这学期也学习了Linux操作系统。当然了,在大学里就是随便的教教,我们也在下边随便的打打酱油而已。前天突然心血来潮,何不做一个图形界面的程序来练练手。说做就做,先声明,本人菜鸟,所以这个过程十分的漫长,花了整整一天的时间。
首先,就是搭建gtk开发环境。光是熟悉这个概念就用了好长时间。你可以自己百度或着查阅相关资料。这里我也推荐一些比较好的博文给大家。
http://wenku.baidu.com/view/f996fa563c1ec5da50e27099.html
我使用的是ubuntu,默认的是gnome,装gtk的时候可是花费了不少时间,因为老是提示说依赖关系不正确而安装不了开发环境。后来在一个博客上找到了解决方法,现在分享给大家。如果提示下面到问题:
下列软件包有未满足的依赖关系:
gnome-devel: 依赖: libgdl-1-dev (>= 2.28) 但是它将不会被安装
推荐: gnome-core-devel 但是它将不会被安装
E: 破损的软件包
那么可以使用下面到命令:
sudo aptitude install gnome-core-devel
http://blog.sina.com.cn/s/blog_3fbc1c610100lf91.html
安装好程序后,下面是计算器的源码:
glade_counter.c
#include <gtk/gtk.h>#include <stdlib.h> /*创建一个指向GtkWidget类型的指针(创建文本框使用)*/static GtkWidget *entry; /*创建全局变量:名为“fnum”(双精度,第一个输入量); “snum”(双精度,第二个输入量)*/gdouble fnum = 0;gdouble snum = 0; /*创建全局控制变量:名为“num_count”(整型,控制输入位数); “operator”(整型,控制输入的运算符号); “first_num”(布尔型,控制输入的次数); “have_result”(布尔型,为重新进行计算作好准备)*/gint num_count =0;gint operator = 0;gboolean first_num = TRUE;//gboolean first_num_equal = FALSE;gboolean have_dot = FALSE; //小数点gboolean have_result = FALSE;gchar number[100];/*........................................................................ *///清除函数:cb_clean_clicked()//1:清除屏幕上的内容(TURE);2:初始化变量并清屏(FALSE)void cb_clean_clicked(gboolean clear_only) { /*初始化number[100]等,分配内存空间*/ gint i = 0; for(i = 0;i<100;i++) number[i] = '\0'; fnum = 0; snum = 0; operator = 0; num_count = 0; first_num = TRUE; have_dot = FALSE; have_result = FALSE; //first_num_equal = FALSE; /*清除屏幕*/ if(clear_only = TRUE) gtk_entry_set_text(GTK_ENTRY(entry),"0"); } /*---------------------------------------------------------------------------------- *///按下数字时的回调函数:cb_num_clicked()void cb_num_clicked(GtkButton *button,gpointer data) { /*创建一个指向字符的指针变量:"num"(用来操作输入量)*/ const gchar *num; int i; /*控制输入数字的位数*/ if(num_count == 9) return; /*输入位数记数*/ num_count++; /*通过button的label获取每次输入的数值(字符串型)*/ num=gtk_button_get_label(GTK_BUTTON(button)); /*g_strlcat() 可以用来组合每次输入数字(字符串)起到累加作用*/ i=g_strlcat(number,num,100); /*输入第一个数和第二个数的控制开关,strtod()是把字符串转换为gdouble型*/ if(first_num ) { /*第一次输入*/ fnum=strtod(number,NULL); } else { /*第二次输入*/ /*防止除法时除数为0*/ if(num_count == 1); snum=strtod(number,NULL); if(num_count == 1 && operator ==4 && snum == 0) //gtk_entry_set_text(GTK_ENTRY(entry),"ERROR"); return; } if (number[0]=='0' && number[1]!='.' &&num_count>=2 ) { gint i; for (i =0 ; i<100; i++) { number[i] = number[i+1]; } } /*把输入的数字显示出来*/ gtk_entry_set_text(GTK_ENTRY(entry),number); //g_print("F:%f\n",fnum); //g_print("S:%f\n",snum); }/*----------------------------------------------------------------------------------*///按下小数点时的回调函数:cb_dot_clicked()void cb_dot_clicked(GtkButton *button,gpointer data) { gint i; /*重复计算的切换开关*/ if(have_result) cb_clean_clicked(FALSE); /*如果小数点在第一位则不显示*/ if(num_count == 0) { cb_clean_clicked(TRUE); return; } /*把数加上小数点进行显示.have_dot防止输入两次小数点*/ if(have_dot == FALSE) { have_dot = TRUE; i=g_strlcat(number,".",100); if(first_num) /*第一个数字输入*/ fnum=strtod(number,NULL); else { /*第二个数字输入*/ snum=strtod(number,NULL); /*把输入的数字显示出来*/ gtk_entry_set_text(GTK_ENTRY(entry),num