gtk 开发实践第三篇

先看个简单的例子

[cpp]  view plain  copy
  在CODE上查看代码片 派生到我的代码片
  1.  #include <gtk/gtk.h>    
  2.  int main(int argc,char *argv[])    
  3. {    
  4.                  GtkWidget *window;    
  5.                  GtkWidget *label;  
  6.          char title[]="test";                                        
  7.          char text[]="This is the test.";    
  8.          gtk_init(&argc, &argv);    
  9.          window=gtk_window_new(GTK_WINDOW_TOPLEVEL);    
  10.          gtk_window_set_title(GTK_WINDOW(window), title);    
  11.          gtk_widget_set_usize(GTK_WINDOW (window),300,150);                                                   
  12.          label=gtk_label_new(text);    
  13.          gtk_container_add(GTK_CONTAINER(window), label);    
  14.          gtk_widget_show(window);    
  15.          gtk_widget_show(label);    
  16.          gtk_main();    
  17.          return 0;        
  18. 』                 

其中shell的命令是

[cpp]  view plain  copy
  在CODE上查看代码片 派生到我的代码片
  1. gcc -o 3.out 3.c  `pkg-config --cflags --libs gtk+-2.0`   

其中为什么要加上单引号 

pkg-config的作用是警告系统中库的信息

--cflags表示库的编译环境是C 语言

--lib gtk+-2.0需要查找的库是gtk+,版本是2.0

更新了我lib库之后我用的是gtk3.0的

现在先实现calculator中的加法功能

[cpp]  view plain  copy
  在CODE上查看代码片 派生到我的代码片
  1. #include <gtk/gtk.h>  
  2. #include <stdio.h>  
  3. #include <stdlib.h>  
  4. #include <string.h>  
  5.   
  6. GtkWidget *window;  
  7. GtkWidget *txt1;  
  8. GtkWidget *txt2;  
  9. GtkWidget *table;  
  10. GtkWidget *button;  
  11. GtkWidget *label;  
  12.   
  13. void on_clicked(GtkWidget *widget,gpointer data)  
  14. {  
  15.     char a1[10];  
  16.     char a2[10];  
  17.     char a3[10];  
  18.     float a,b,c;  
  19.     strcpy(a1,gtk_entry_get_text(GTK_ENTRY(txt1)));  
  20.     strcpy(a2,gtk_entry_get_text(GTK_ENTRY(txt2)));  
  21.       
  22.     a = atof(a1);  
  23.     b = atof(a2);  
  24.       
  25.     c = a+b;  
  26.       
  27.     gcvt(c,7,a3);  
  28.     gtk_label_set_text(GTK_LABEL(label),a3);  
  29.       
  30. }  
  31.   
  32. int main(int argc,char **argv)  
  33. {  
  34.     char title[]="my window";  
  35.     gtk_init(&argc,&argv);  
  36.       
  37.     window = gtk_window_new(GTK_WINDOW_TOPLEVEL);  
  38.     gtk_window_set_title(GTK_WINDOW(window),title);  
  39.     gtk_window_set_default_size(GTK_WINDOW(window),250,300);  
  40.     g_signal_connect(G_OBJECT(window),"delete_event",G_CALLBACK(gtk_main_quit),NULL);  
  41.     txt1 = gtk_entry_new();  
  42.     gtk_widget_show(txt1);  
  43.     txt2 = gtk_entry_new();  
  44.     gtk_widget_show(txt2);  
  45.     button = gtk_button_new_with_label("OK");  
  46.     gtk_widget_show(button);  
  47.     label = gtk_label_new("Result .");  
  48.     gtk_widget_show(label);  
  49.   
  50.     table = gtk_table_new(4,1,FALSE);  
  51.     gtk_widget_show(table);  
  52.   
  53.     gtk_container_add(GTK_CONTAINER(window),table);  
  54.   
  55.     gtk_table_attach(GTK_TABLE(table),txt1,0,1,0,1,  
  56.             (GtkAttachOptions)(GTK_FILL),  
  57.             (GtkAttachOptions)(0),11,11);  
  58.     gtk_table_attach(GTK_TABLE(table),txt2,0,1,1,2,  
  59.                         (GtkAttachOptions)(GTK_FILL),  
  60.                         (GtkAttachOptions)(0),11,11);  
  61.     gtk_table_attach(GTK_TABLE(table),button,0,1,2,3,  
  62.                         (GtkAttachOptions)(GTK_FILL),  
  63.                         (GtkAttachOptions)(0),11,11);  
  64.     gtk_table_attach(GTK_TABLE(table),label,0,1,3,4,  
  65.                         (GtkAttachOptions)(GTK_FILL),  
  66.                         (GtkAttachOptions)(0),11,11);  
  67.     g_signal_connect(G_OBJECT(button),"clicked",G_CALLBACK(on_clicked),NULL);  
  68.       
  69.     gtk_widget_show_all(window);  
  70.     gtk_main();  
  71.     return 0;  
  72. }  

运行出来的界面是

shell的代码是:

[cpp]  view plain  copy
  在CODE上查看代码片 派生到我的代码片
  1. gcc -o calc.out  calc.c `pkg-config --cflags --libs gtk+-3.0`  

如果还是编译不通过的话有可能是gtk找不到

那可以使用

[cpp]  view plain  copy
  在CODE上查看代码片 派生到我的代码片
  1. export LD_LIBRARY_PATH=/usr/lib  

把需要的lib库路径加进去

终于写完了,其实应该说是抄完了哇

[cpp]  view plain  copy
  在CODE上查看代码片 派生到我的代码片
  1. #include <gtk/gtk.h>  
  2. #include <stdio.h>  
  3. #include <stdlib.h>  
  4. #include <string.h>  
  5.   
  6. GtkWidget *window;  
  7. GtkWidget *table1;  
  8. GtkWidget *entry1;  
  9. GtkWidget *table2;  
  10. GtkWidget *button1;  
  11. GtkWidget *button2;  
  12. GtkWidget *button3;  
  13. GtkWidget *button4;  
  14. GtkWidget *button5;  
  15. GtkWidget *button6;  
  16. GtkWidget *button7;  
  17. GtkWidget *button8;  
  18. GtkWidget *button9;  
  19. GtkWidget *button10;  
  20. GtkWidget *button11;  
  21. GtkWidget *button12;  
  22. GtkWidget *button13;  
  23. GtkWidget *button14;  
  24. GtkWidget *button15;  
  25. GtkWidget *button16;  
  26.   
  27. float a,b;  
  28. int hasdot;  
  29. int method;  
  30.   
  31. void input(GtkButton *widget,gpointer data)  
  32. {  
  33.     gtk_entry_append_text(GTK_ENTRY(entry1),gtk_button_get_label(widget));  
  34.     //gtk_editable_insert_text(GTK_ENTRY(entry1),gtk_button_get_label(widget),1,1);  
  35. }  
  36. void plus(GtkWidget *widget,gpointer data)  
  37. {  
  38.     char num[20];  
  39.     strcpy(num,gtk_entry_get_text(GTK_ENTRY(entry1)));  
  40.     if(a==0)  
  41.     {  
  42.         gtk_entry_set_text(GTK_ENTRY(entry1),"");  
  43.         a = atof(num);  
  44.     }  
  45.     else  
  46.     {  
  47.         b = atof(num);  
  48.         switch(method)  
  49.         {  
  50.             case 0:  
  51.                 a = a + b;break;  
  52.             case 1:  
  53.                 a = a - b;break;  
  54.             case 2:  
  55.                 a = a * b;break;  
  56.             case 3:  
  57.                 a = a / b;break;  
  58.         }  
  59.         gcvt(a,5,num);  
  60.         b = 0;  
  61.         method = 0;  
  62.         gtk_entry_set_text(GTK_ENTRY(entry1),num);  
  63.     }  
  64.     hasdot = 0;  
  65. }  
  66. void sub(GtkWidget *widget,gpointer data)  
  67. {  
  68.     method = 1;  
  69.     char num[20];  
  70.     strcpy(num,gtk_entry_get_text(GTK_ENTRY(entry1)));  
  71.         if(a==0)  
  72.         {  
  73.                 gtk_entry_set_text(GTK_ENTRY(entry1),"");  
  74.                 a = atof(num);  
  75.         }  
  76.         else  
  77.         {  
  78.                 b = atof(num);  
  79.     }  
  80.     hasdot = 0;  
  81.   
  82. }  
  83.   
  84. void multi(GtkWidget *widget,gpointer data)  
  85. {  
  86.     method = 2;  
  87.         char num[20];  
  88.         strcpy(num,gtk_entry_get_text(GTK_ENTRY(entry1)));  
  89.         if(a==0)  
  90.         {  
  91.                 gtk_entry_set_text(GTK_ENTRY(entry1),"");  
  92.                 a = atof(num);  
  93.         }  
  94.         else  
  95.         {  
  96.                 b = atof(num);  
  97.         }  
  98.         hasdot = 0;  
  99.   
  100. }  
  101.   
  102. void divide(GtkWidget *widget,gpointer data)  
  103. {  
  104.     method = 3;  
  105.         char num[20];  
  106.         strcpy(num,gtk_entry_get_text(GTK_ENTRY(entry1)));  
  107.         if(a==0)  
  108.         {  
  109.                 gtk_entry_set_text(GTK_ENTRY(entry1),"");  
  110.                 a = atof(num);  
  111.         }  
  112.         else  
  113.         {  
  114.                 b = atof(num);  
  115.         }  
  116.         hasdot = 0;  
  117.   
  118. }  
  119. //set the dot of float  
  120. void dot(GtkButton *widget,gpointer data)  
  121. {  
  122.     if(hasdot == 0)  
  123.     {  
  124.         gtk_entry_append_text(GTK_ENTRY(entry1),gtk_button_get_label (widget));  
  125.         hasdot = 1;  
  126.     }  
  127. }  
  128.   
  129. //clear data  
  130. void clear(GtkWidget *widget,gpointer data)  
  131. {  
  132.     gtk_entry_set_text(GTK_ENTRY(entry1),"");  
  133.     hasdot = 0;  
  134.     a = 0;  
  135.     b = 0;  
  136.     method = 0;  
  137. }  
  138.   
  139. void interface()  
  140. {  
  141.     char title[]="my window";  
  142.     window = gtk_window_new(GTK_WINDOW_TOPLEVEL);  
  143.         gtk_window_set_title(GTK_WINDOW(window),title);  
  144.     table1 = gtk_table_new(2,1,FALSE);  
  145.     gtk_widget_show(table1);  
  146.     gtk_container_add(GTK_CONTAINER(window),table1);  
  147.       
  148.     entry1 = gtk_entry_new();  
  149.     gtk_widget_show(entry1);  
  150.     gtk_table_attach(GTK_TABLE(table1),entry1,0,1,0,1,  
  151.                         (GtkAttachOptions)(GTK_EXPAND|GTK_FILL),  
  152.                         (GtkAttachOptions)(0),0,0);  
  153.     table2 = gtk_table_new(4,4,FALSE);  
  154.         gtk_widget_show(table2);  
  155.     gtk_table_attach(GTK_TABLE(table1),table2,0,1,1,2,  
  156.                         (GtkAttachOptions)(GTK_FILL),  
  157.                         (GtkAttachOptions)(GTK_EXPAND|GTK_FILL),0,0);  
  158.     button1 = gtk_button_new_with_mnemonic("1");  
  159.     gtk_widget_show(button1);  
  160.     gtk_table_attach(GTK_TABLE(table2),button1,0,1,0,1,  
  161.             (GtkAttachOptions)(GTK_FILL),  
  162.                         (GtkAttachOptions)(0),0,0);  
  163.     gtk_widget_set_size_request(button1,50,30);  
  164.       
  165.     button2 = gtk_button_new_with_mnemonic("2");  
  166.         gtk_widget_show(button2);  
  167.         gtk_table_attach(GTK_TABLE(table2),button2,1,2,0,1,  
  168.                         (GtkAttachOptions)(GTK_FILL),  
  169.                         (GtkAttachOptions)(0),0,0);  
  170.         gtk_widget_set_size_request(button2,50,30);  
  171.       
  172.     button3 = gtk_button_new_with_mnemonic("3");  
  173.         gtk_widget_show(button3);  
  174.         gtk_table_attach(GTK_TABLE(table2),button3,2,3,0,1,  
  175.                         (GtkAttachOptions)(GTK_FILL),  
  176.                         (GtkAttachOptions)(0),0,0);  
  177.         gtk_widget_set_size_request(button3,50,30);  
  178.   
  179.     button4 = gtk_button_new_with_mnemonic("4");  
  180.         gtk_widget_show(button4);  
  181.         gtk_table_attach(GTK_TABLE(table2),button4,0,1,1,2,  
  182.                         (GtkAttachOptions)(GTK_FILL),  
  183.                         (GtkAttachOptions)(0),0,0);  
  184.         //gtk_widget_set_size_request(button4,50,30);  
  185.   
  186.     button5 = gtk_button_new_with_mnemonic("5");  
  187.         gtk_widget_show(button5);  
  188.         gtk_table_attach(GTK_TABLE(table2),button5,1,2,1,2,  
  189.                         (GtkAttachOptions)(GTK_FILL),  
  190.                         (GtkAttachOptions)(0),0,0);  
  191.         //gtk_widget_set_size_request(button5,50,30);  
  192.   
  193.     button6 = gtk_button_new_with_mnemonic("6");  
  194.         gtk_widget_show(button6);  
  195.         gtk_table_attach(GTK_TABLE(table2),button6,2,3,1,2,  
  196.                         (GtkAttachOptions)(GTK_FILL),  
  197.                         (GtkAttachOptions)(0),0,0);  
  198.         //gtk_widget_set_size_request(button1,50,30);  
  199.   
  200.     button7 = gtk_button_new_with_mnemonic("7");  
  201.         gtk_widget_show(button7);  
  202.         gtk_table_attach(GTK_TABLE(table2),button7,0,1,2,3,  
  203.                         (GtkAttachOptions)(GTK_FILL),  
  204.                         (GtkAttachOptions)(0),0,0);  
  205.   
  206.     button8 = gtk_button_new_with_mnemonic("8");  
  207.         gtk_widget_show(button8);  
  208.         gtk_table_attach(GTK_TABLE(table2),button8,1,2,2,3,  
  209.                         (GtkAttachOptions)(GTK_FILL),  
  210.                         (GtkAttachOptions)(0),0,0);  
  211.   
  212.     button9 = gtk_button_new_with_mnemonic("9");  
  213.         gtk_widget_show(button9);  
  214.         gtk_table_attach(GTK_TABLE(table2),button9,2,3,2,3,  
  215.                         (GtkAttachOptions)(GTK_FILL),  
  216.                         (GtkAttachOptions)(0),0,0);  
  217.   
  218.     button10 = gtk_button_new_with_mnemonic("0");  
  219.         gtk_widget_show(button10);  
  220.         gtk_table_attach(GTK_TABLE(table2),button10,1,2,3,4,  
  221.                         (GtkAttachOptions)(GTK_FILL),  
  222.                         (GtkAttachOptions)(0),0,0);  
  223.   
  224.     button11 = gtk_button_new_with_mnemonic(".");  
  225.         gtk_widget_show(button11);  
  226.         gtk_table_attach(GTK_TABLE(table2),button11,0,1,3,4,  
  227.                         (GtkAttachOptions)(GTK_FILL),  
  228.                         (GtkAttachOptions)(0),0,0);  
  229.       
  230.     button12 = gtk_button_new_with_mnemonic("+ =");  
  231.         gtk_widget_show(button12);  
  232.         gtk_table_attach(GTK_TABLE(table2),button12,2,3,3,4,  
  233.                         (GtkAttachOptions)(GTK_FILL),  
  234.                         (GtkAttachOptions)(0),0,0);  
  235.       
  236.     button13 = gtk_button_new_with_mnemonic("-");  
  237.         gtk_widget_show(button13);  
  238.         gtk_table_attach(GTK_TABLE(table2),button13,3,4,0,1,  
  239.                         (GtkAttachOptions)(GTK_FILL),  
  240.                         (GtkAttachOptions)(0),0,0);  
  241.     gtk_widget_set_size_request(button13,50,-1);  
  242.   
  243.     button14 = gtk_button_new_with_mnemonic("X");  
  244.         gtk_widget_show(button14);  
  245.         gtk_table_attach(GTK_TABLE(table2),button14,3,4,1,2,  
  246.                         (GtkAttachOptions)(GTK_FILL),  
  247.                         (GtkAttachOptions)(0),0,0);  
  248.   
  249.     button15 = gtk_button_new_with_mnemonic("/");  
  250.         gtk_widget_show(button15);  
  251.         gtk_table_attach(GTK_TABLE(table2),button15,3,4,2,3,  
  252.                         (GtkAttachOptions)(GTK_FILL),  
  253.                         (GtkAttachOptions)(0),0,0);  
  254.   
  255.     button16 = gtk_button_new_with_mnemonic("CE");  
  256.         gtk_widget_show(button16);  
  257.         gtk_table_attach(GTK_TABLE(table2),button16,3,4,3,4,  
  258.                         (GtkAttachOptions)(GTK_FILL),  
  259.                         (GtkAttachOptions)(0),0,0);  
  260. }  
  261.   
  262. //signal  
  263. void addsignal()  
  264. {  
  265.     g_signal_connect(G_OBJECT(button1),"clicked",G_CALLBACK(input),NULL);  
  266.     g_signal_connect(G_OBJECT(button2),"clicked",G_CALLBACK(input),NULL);  
  267.     g_signal_connect(G_OBJECT(button3),"clicked",G_CALLBACK(input),NULL);  
  268.     g_signal_connect(G_OBJECT(button4),"clicked",G_CALLBACK(input),NULL);  
  269.     g_signal_connect(G_OBJECT(button5),"clicked",G_CALLBACK(input),NULL);  
  270.     g_signal_connect(G_OBJECT(button6),"clicked",G_CALLBACK(input),NULL);  
  271.     g_signal_connect(G_OBJECT(button7),"clicked",G_CALLBACK(input),NULL);  
  272.     g_signal_connect(G_OBJECT(button8),"clicked",G_CALLBACK(input),NULL);  
  273.     g_signal_connect(G_OBJECT(button9),"clicked",G_CALLBACK(input),NULL);  
  274.     g_signal_connect(G_OBJECT(button10),"clicked",G_CALLBACK(input),NULL);  
  275.     g_signal_connect(G_OBJECT(button11),"clicked",G_CALLBACK(dot),NULL);  
  276.     g_signal_connect(G_OBJECT(button12),"clicked",G_CALLBACK(plus),NULL);  
  277.     g_signal_connect(G_OBJECT(button13),"clicked",G_CALLBACK(sub),NULL);  
  278.     g_signal_connect(G_OBJECT(button14),"clicked",G_CALLBACK(multi),NULL);  
  279.     g_signal_connect(G_OBJECT(button15),"clicked",G_CALLBACK(divide),NULL);  
  280.     g_signal_connect(G_OBJECT(button16),"clicked",G_CALLBACK(clear),NULL);  
  281.     g_signal_connect(G_OBJECT(window),"delete_event",gtk_main_quit,NULL);  
  282. }  
  283.   
  284. int main(int argc,char **argv)  
  285. {  
  286.     a = 0;  
  287.     b = 0;  
  288.     hasdot = 0;  
  289.     gtk_set_locale();  
  290.     gtk_init(&argc,&argv);  
  291.     method = 0;  
  292.     interface();  
  293.     addsignal();  
  294.     gtk_widget_show(window);  
  295.     gtk_main();  
  296.     return 0;  
  297. }  

这个破程序搞了差不多半天时间,就是调不出来,出现的错误是

/tmp/cc7q2YVD.o: In function `input':
calc.c:(.text+0x33): undefined reference to `gtk_entry_append_text'
/tmp/cc7q2YVD.o: In function `dot':
calc.c:(.text+0x4bd): undefined reference to `gtk_entry_append_text'
/tmp/cc7q2YVD.o: In function `main':
calc.c:(.text+0x14c8): undefined reference to `gtk_set_locale'
collect2: ld returned 1 exit status
怎么都搞不定,我还看了gtk_entry_append_text这个函数的原型,以及现在的版本说是现在被

gtk_editable_insert_text给代替了,我换成这个函数之后提示还是不对,而且参数的的个数也不对,这个函数要求四个参数,于是就不想折腾了,最后恶心的又更换成个gtk2.0

一次成功,好,不罗嗦。

结果图我就不上传了,就是计算器的一般样子

说说这个程序的缺点吧,缺点非常的多,第一个就是不能简单的连续加减乘除,还有一个就是不能对数据进行简单的判断,还有仅限于简单的加加减减,需要改进

下一步我的目的就是改进这个calculator


在网上查了下GTK,有人已经把我想做的全做了,在此我就不再改进了,直接给出别人的代码供大家和我自己学习

[cpp]  view plain  copy
  在CODE上查看代码片 派生到我的代码片
  1. #include <gtk/gtk.h>  
  2. #include <math.h>  
  3. #include <string.h>  
  4. #include <stdlib.h>  
  5. #include <stdio.h>  
  6.   
  7. double a , b;  
  8.   
  9. int hasdot;        /*是否有小数点*/  
  10. int method;        /*区别不同的运算*/  
  11. char out[20] = "0";  
  12. GtkWidget *window;  
  13. GtkWidget *vbox;  
  14. GtkWidget *entry1;  
  15. GtkWidget *label1;  
  16. GtkWidget *table1;  
  17. GtkWidget *button1;  
  18. GtkWidget *button2;  
  19. GtkWidget *button3;  
  20. GtkWidget *button4;  
  21. GtkWidget *button5;  
  22. GtkWidget *button6;  
  23. GtkWidget *button7;  
  24. GtkWidget *button8;  
  25. GtkWidget *button9;  
  26. GtkWidget *button10;  
  27. GtkWidget *button11;  
  28. GtkWidget *button12;  
  29. GtkWidget *button13;  
  30. GtkWidget *button14;  
  31. GtkWidget *button15;  
  32. GtkWidget *button16;  
  33. GtkWidget *button17;  
  34. GtkWidget *button18;  
  35. GtkWidget *button19;  
  36. GtkWidget *button20;  
  37. GtkWidget *button21;  
  38. GtkWidget *button22;  
  39. GtkWidget *button23;  
  40. GtkWidget *button24;  
  41. GtkWidget *button25;  
  42. GtkWidget *button26;  
  43. GtkWidget *button27;  
  44. GtkWidget *button28;  
  45. GtkWidget *button29;  
  46. GtkWidget *button30;  
  47. GtkWidget *button31;  
  48. GtkWidget *button32;  
  49. GtkWidget *button33;  
  50. GtkWidget *button34;  
  51. GtkWidget *button35;  
  52. GtkWidget *button36;  
  53.   
  54. /**************************************************************************************************************/  
  55. /*双目运算函数*/  
  56. void Binary_Operator()  
  57. {  
  58.     char num[20];  
  59.  strcpy(num , gtk_entry_get_text(GTK_ENTRY(entry1)));  
  60.  if( a == 0 )                                        /*如果没有第一个数,则存储为第一个数*/  
  61.  {  
  62.      gtk_entry_set_text(GTK_ENTRY(entry1) , "");  
  63.         a = atof(num);                                  /*字符串转换成浮点型*/  
  64.  }  
  65.  else  
  66.  {  
  67.         b = atof(num);  
  68.  }  
  69.  hasdot = 0;                                         /*表示没有小数点*/  
  70. }  
  71.   
  72. /*单目运算的结果输出*/  
  73. void Right_output()  
  74. {  
  75.     char num[20];  
  76.  gcvt(a , 32 , num);                                /*运算结果浮点型转换成字符串*/  
  77.  gtk_entry_set_text(GTK_ENTRY(entry1) , num);       /*直接显示结果*/  
  78.  a = 0;  
  79.  b = 0;  
  80.  method = 0;  
  81. }  
  82.   
  83. /*递归函数求阶乘*/  
  84. float fun(int c)  
  85. {  
  86.     float d;  
  87.  if( c == 0 || c == 1 )  
  88.   d = 1;  
  89.  else  
  90.   d = fun(c - 1)*c;  
  91.   
  92.  return d;  
  93. }  
  94.   
  95. /*双目运算的结果输出*/  
  96. void output()  
  97. {  
  98.     char num[20] = "0";  
  99.  strcpy(num , gtk_entry_get_text(GTK_ENTRY(entry1)));  /*取得文本框的内容*/  
  100.  b = atof(num);                                         /*字符型转换成浮点型*/  
  101.  switch( method )  
  102.  {  
  103.         case 0:  
  104.    a = a + b ; Right_output() ; break ;           /*+*/  
  105.   case 1:  
  106.    a = a - b ; Right_output() ; break ;           /*-*/  
  107.   case 2:  
  108.    a = a * b ; Right_output() ; break ;           /***/  
  109.   case 3:  
  110.    if( b == 0 )  
  111.    {  
  112.                 a = 0;  
  113.     b = 0;  
  114.     method = 0;  
  115.     gtk_entry_set_text(GTK_ENTRY(entry1) , "Remainder can't for 0!");  
  116.    }  
  117.    else  
  118.    {  
  119.                 a = a / b ; Right_output() ;               /*/*/  
  120.    } break;  
  121.   case 4:  
  122.    a = pow(a , b) ; Right_output() ; break;       /*pow 算a的b次幂X^Y*/  
  123.   case 5:  
  124.    a = ((int )a) & ((int )b) ; Right_output() ; break;  /*& and*/  
  125.   case 6:  
  126.    a = ((int )a) | ((int )b) ; Right_output() ; break;  /*| or*/  
  127.   case 7:  
  128.    a = ((int )a) ^ ((int )b) ; Right_output() ; break;  /*^ 异或 xor*/  
  129.   case 8:  
  130.    if( b == 0 )  
  131.    {  
  132.                 a = 0;  
  133.     b = 0;  
  134.     method = 0;  
  135.     gtk_entry_set_text(GTK_ENTRY(entry1) , "Remainder can't for 0!");  
  136.    }  
  137.    else  
  138.    {  
  139.                 a = ((int )a) % ((int )b); Right_output();       /*%取模(取余) mod*/  
  140.    } break;  
  141.   case 9:  
  142.    a = sin( b ); Right_output() ; break;                /*sin*/  
  143.   case 10:  
  144.    a = cos( b ); Right_output() ; break;                /*cos*/  
  145.   case 11:  
  146.    a = tan( b ); Right_output() ; break;                /*tan*/  
  147.   case 12:  
  148.    a = exp( b ); Right_output() ; break;                /*exp*/  
  149.   case 13:  
  150.    a = b * b * b; Right_output() ; break;               /*X^3*/  
  151.   case 14:  
  152.    a = b * b; Right_output() ; break;                   /*X^2*/  
  153.   case 15:  
  154.    if( b <= 0 )  
  155.    {  
  156.                 a = 0 ;  
  157.     b = 0 ;  
  158.     method = 0 ;  
  159.     gtk_entry_set_text(GTK_ENTRY(entry1) , "Logarithm must be positive !");  
  160.    }  
  161.    else  
  162.    {  
  163.                 a = log( b ); Right_output();                    /*log*/  
  164.    } break;  
  165.   case 16:  
  166.    if( b <= 0 )  
  167.    {  
  168.                 a = 0;  
  169.     b = 0;  
  170.     method = 0;  
  171.     gtk_entry_set_text(GTK_ENTRY(entry1) , "Logarithm must be positive !");  
  172.    }  
  173.    else  
  174.       {  
  175.                 a = log10( b ); Right_output();                  /*ln*/  
  176.    } break;  
  177.   case 17:  
  178.    if( b < 0 )  
  179.    {  
  180.                 a = 0;  
  181.     b = 0;  
  182.     method = 0;  
  183.     gtk_entry_set_text(GTK_ENTRY(entry1) , "Function input is invalid,must be>=0 !");  
  184.    }  
  185.    else  
  186.    {  
  187.                 a = fun((int)(b)); Right_output();              /*n!*/  
  188.    } break;  
  189.   case 18:  
  190.    if( b == 0 )  
  191.    {  
  192.                 a = 0 ;  
  193.     b = 0 ;  
  194.     method = 0;  
  195.     gtk_entry_set_text(GTK_ENTRY(entry1) , "Divisor can't for 0 !");  
  196.    }  
  197.    else  
  198.    {  
  199.                 a = 1 / b; Right_output();                      /*1/X*/  
  200.    } break;  
  201.   case 19:  
  202.    a = ~((int )b); Right_output(); break;              /*not 取反*/  
  203.   case 20:  
  204.    a = floor(b) ; Right_output(); break;       /*int取整floor返回小于或等于指定表达式的最大整数*/  
  205.   defaultbreak;  
  206.  }  
  207. }  
  208.   
  209. /**************************************************************************************************************/  
  210. /*加法运算*/  
  211. void Add(GtkWidget *widget , gpointer data)  
  212. {  
  213.     method = 0;  
  214.  Binary_Operator();  
  215. }  
  216.   
  217. /*减法运算*/  
  218. void Sub(GtkWidget *widget , gpointer data)  
  219. {  
  220.     method = 1;  
  221.  Binary_Operator();  
  222. }  
  223.   
  224. /*乘法运算*/  
  225. void Mul(GtkWidget *widget , gpointer data)  
  226. {  
  227.     method = 2;  
  228.  Binary_Operator();  
  229. }  
  230.   
  231. /*除法运算*/  
  232. void Division(GtkWidget *widget , gpointer data)  
  233. {  
  234.     method = 3;  
  235.  Binary_Operator();  
  236. }  
  237.   
  238. /*exp 幂运算*/  
  239. void Mathpowxy(GtkWidget *widget , gpointer data)  
  240. {  
  241.     method = 4;  
  242.  Binary_Operator();  
  243. }  
  244.   
  245. /*and 逻辑与*/  
  246. void And(GtkWidget *widget , gpointer data)  
  247. {  
  248.     method = 5;  
  249.  Binary_Operator();  
  250. }  
  251.   
  252. /*or 逻辑或*/  
  253. void Or(GtkWidget *widget , gpointer data)  
  254. {  
  255.     method = 6;  
  256.  Binary_Operator();  
  257. }  
  258.   
  259. /*xor逻辑异或 */  
  260. void Xor(GtkWidget *widget , gpointer data)  
  261. {  
  262.     method = 7;  
  263.  Binary_Operator();  
  264. }  
  265.   
  266. /*Mod 模运算(取余)*/  
  267. void Mod(GtkWidget *widget , gpointer data)  
  268. {  
  269.     method = 8;  
  270.  Binary_Operator();  
  271. }  
  272. /**************************************************************************************************************/  
  273.   
  274. /*sin*/  
  275. void Sin(GtkWidget *widget , gpointer data)  
  276. {  
  277.     method = 9;  
  278.  output();  
  279. }  
  280.   
  281. /*cos*/  
  282. void Cos(GtkWidget *widget , gpointer data)  
  283. {  
  284.     method = 10;  
  285.  output();  
  286. }  
  287.   
  288. /*tan*/  
  289. void Tan(GtkWidget *widget , gpointer data)  
  290. {  
  291.     method = 11;  
  292.  output();  
  293. }  
  294.   
  295. /*exp*/  
  296. void Exp(GtkWidget *widget , gpointer data)  
  297. {  
  298.     method = 12;  
  299.  output();  
  300. }  
  301.   
  302. /*X^3 立方*/  
  303. void Cube(GtkWidget *widget , gpointer data)  
  304. {  
  305.     method = 13;  
  306.  output();  
  307. }  
  308.   
  309. /*X^2 平方*/  
  310. void Square(GtkWidget *widget , gpointer data)  
  311. {  
  312.     method = 14;  
  313.  output();  
  314. }  
  315.   
  316. /*log_e*/  
  317. void Log_e(GtkWidget *widget , gpointer data)  
  318. {  
  319.     method = 15;  
  320.  output();  
  321. }  
  322.   
  323. /*Log_10*/  
  324. void Log_10(GtkWidget *widget , gpointer data)  
  325. {  
  326.     method = 16;  
  327.  output();  
  328. }  
  329.   
  330. /*N!*/  
  331. void Factorial(GtkWidget *widget , gpointer data)  
  332. {  
  333.     method = 17;  
  334.  output();  
  335. }  
  336.   
  337. /*1/X*/  
  338. void Inverse(GtkWidget *widget , gpointer data)  
  339. {  
  340.     method = 18;  
  341.  output();  
  342. }  
  343.   
  344. /*not逻辑非*/  
  345. void Not(GtkWidget *widget , gpointer data)  
  346. {  
  347.     method = 19;  
  348.  output();  
  349. }  
  350.   
  351. /*int 取整*/  
  352. void Floor(GtkWidget *widget , gpointer data)  
  353. {  
  354.     method = 20;  
  355.  output();  
  356. }  
  357. /**************************************************************************************************************/  
  358.   
  359. /*.小数点*/  
  360. void dot(GtkWidget *widget , gpointer data)  
  361. {  
  362.     if( hasdot == 0 )  
  363.     {  
  364.         gtk_entry_append_text(GTK_ENTRY(entry1) , gtk_button_get_label(widget));  
  365.   hasdot = 1;                            /*表示有一个小数点*/  
  366.  }  
  367. }  
  368.   
  369. /*正负选择+/-*/  
  370. void Sign()  
  371. {  
  372.     char num[20];  
  373.  float c;  
  374.  strcpy(num , gtk_entry_get_text(GTK_ENTRY(entry1)));    /*取得文本框的内容*/  
  375.  c = atof(num);                                           /*字符型转换成浮点型*/  
  376.  c = -c;  
  377.  gcvt(c , 32 , num);                                      /*浮点型转换成字符型*/  
  378.  gtk_entry_set_text(GTK_ENTRY(entry1) , num);             /*显示结果*/  
  379. }  
  380.   
  381. /*清除函数CR*/  
  382. void clear(GtkWidget *widget , gpointer data)  
  383. {  
  384.     gtk_entry_set_text(GTK_ENTRY(entry1) , "");  
  385.  hasdot = 0;  
  386.  a = 0;  
  387.  b = 0;  
  388.  method = 0;  
  389. }  
  390.   
  391. /*输入函数*/  
  392. void input(GtkWidget *widget , gpointer data)  
  393. {  
  394.     gtk_entry_append_text(GTK_ENTRY(entry1) , gtk_button_get_label(widget));  
  395. }  
  396.   
  397. /*pi*/  
  398. void input_pi(GtkWidget *widget , gpointer data)  
  399. {  
  400.     gtk_entry_set_text(GTK_ENTRY(entry1) , "3.1415926535897932384626433832795");  
  401. }  
  402.   
  403. /**************************************************************************************************************/  
  404. /*界面构建函数*/  
  405. void interface()  
  406. {  
  407.     char title[]="My Calculator";  
  408.  window = gtk_window_new(GTK_WINDOW_TOPLEVEL);       /*创建一个窗口*/  
  409.  gtk_window_set_title(GTK_WINDOW(window) , title); /*为窗口添加标题*/  
  410.   
  411.  vbox = gtk_vbox_new(FALSE , 0);                     /*创建垂直框*/  
  412.  gtk_container_add(GTK_CONTAINER(window) , vbox);    /*把垂直框添加到窗口中*/  
  413.  gtk_widget_show(vbox);                              /*显示垂直框*/  
  414.   
  415.  entry1 = gtk_entry_new();                           /*创建一个文本框*/  
  416.  gtk_box_pack_start(GTK_BOX(vbox) , entry1 , TRUE , FALSE , 0);/*把文本框添加到垂直框中*/  
  417.  gtk_widget_show(entry1);                            /*显示文本框*/  
  418.   
  419.  label1 = gtk_label_new("        10  calculate        ");                           /*创建一个标签*/  
  420.  gtk_box_pack_start(GTK_BOX(vbox) , label1 , TRUE , FALSE , 0);/*把标签添加到垂直框中*/  
  421.  gtk_widget_show(label1);                            /*显示垂直框*/  
  422.   
  423.  table1 = gtk_table_new(4 , 9 , FALSE);              /*创建一个表格*/  
  424.  gtk_box_pack_start(GTK_BOX(vbox) , table1 , TRUE , FALSE , 0);/*表格添加到垂直框中*/  
  425.  gtk_widget_show(table1);                            /*显示表格*/  
  426.     /**************************************************************************************************************/  
  427.  //button1 = gtk_button_new_with_mnemonic("Pi");  
  428.  button1 = gtk_button_new_with_label("Pi");          /*创建按钮*/  
  429.  gtk_table_attach(GTK_TABLE(table1) , button1 , 0 , 1 , 0 , 1 , (GtkAttachOptions)(GTK_FILL) , (GtkAttachOptions)(0) , 0 , 0);  
  430.  gtk_widget_set_size_request(button1 , 70 , 35);     /*设置按钮大小*/  
  431.  gtk_widget_show(button1);                           /*显示按钮*/  
  432.   
  433.     //button2 = gtk_button_new_with_mnemonic("Sin");  
  434.  button2 = gtk_button_new_with_label("Sin");          /*创建按钮*/  
  435.  gtk_table_attach(GTK_TABLE(table1) , button2 , 0 , 1 , 1 , 2 , (GtkAttachOptions)(GTK_FILL) , (GtkAttachOptions)(0) , 0 , 0);  
  436.  gtk_widget_set_size_request(button2 , 70 , 35);     /*设置按钮大小*/  
  437.  gtk_widget_show(button2);                           /*显示按钮*/  
  438.   
  439.  //button3 = gtk_button_new_with_mnemonic("Cos");  
  440.  button3 = gtk_button_new_with_label("Cos");          /*创建按钮*/  
  441.  gtk_table_attach(GTK_TABLE(table1) , button3 , 0 , 1 , 2 , 3 , (GtkAttachOptions)(GTK_FILL) , (GtkAttachOptions)(0) , 0 , 0);  
  442.  gtk_widget_set_size_request(button3 , 70 , 35);     /*设置按钮大小*/  
  443.  gtk_widget_show(button3);                           /*显示按钮*/  
  444.   
  445.  //button4 = gtk_button_new_with_mnemonic("Tan");  
  446.  button4 = gtk_button_new_with_label("Tan");          /*创建按钮*/  
  447.  gtk_table_attach(GTK_TABLE(table1) , button4 , 0 , 1 , 3 , 4 , (GtkAttachOptions)(GTK_FILL) , (GtkAttachOptions)(0) , 0 , 0);  
  448.  gtk_widget_set_size_request(button4 , 70 , 35);     /*设置按钮大小*/  
  449.  gtk_widget_show(button4);                           /*显示按钮*/  
  450.     /**************************************************************************************************************/  
  451.  //button5 = gtk_button_new_with_mnemonic("Exp");  
  452.  button5 = gtk_button_new_with_label("Exp");          /*创建按钮*/  
  453.  gtk_table_attach(GTK_TABLE(table1) , button5 , 1 , 2 , 0 , 1 , (GtkAttachOptions)(GTK_FILL) , (GtkAttachOptions)(0) , 0 , 0);  
  454.  gtk_widget_set_size_request(button5 , 70 , 35);     /*设置按钮大小*/  
  455.  gtk_widget_show(button5);                           /*显示按钮*/  
  456.   
  457.  //button6 = gtk_button_new_with_mnemonic("X^Y");  
  458.  button6 = gtk_button_new_with_label("X^Y");          /*创建按钮*/  
  459.  gtk_table_attach(GTK_TABLE(table1) , button6 , 1 , 2 , 1 , 2 , (GtkAttachOptions)(GTK_FILL) , (GtkAttachOptions)(0) , 0 , 0);  
  460.  gtk_widget_set_size_request(button6 , 70 , 35);     /*设置按钮大小*/  
  461.  gtk_widget_show(button6);                           /*显示按钮*/  
  462.   
  463.  //button7 = gtk_button_new_with_mnemonic("X^3");  
  464.  button7 = gtk_button_new_with_label("X^3");          /*创建按钮*/  
  465.  gtk_table_attach(GTK_TABLE(table1) , button7 , 1 , 2 , 2 , 3 , (GtkAttachOptions)(GTK_FILL) , (GtkAttachOptions)(0) , 0 , 0);  
  466.  gtk_widget_set_size_request(button7 , 70 , 35);     /*设置按钮大小*/  
  467.  gtk_widget_show(button7);                           /*显示按钮*/  
  468.   
  469.  //button8 = gtk_button_new_with_mnemonic("X^2");  
  470.  button8 = gtk_button_new_with_label("X^2");          /*创建按钮*/  
  471.  gtk_table_attach(GTK_TABLE(table1) , button8 , 1 , 2 , 3 , 4 , (GtkAttachOptions)(GTK_FILL) , (GtkAttachOptions)(0) , 0 , 0);  
  472.  gtk_widget_set_size_request(button8 , 70 , 35);     /*设置按钮大小*/  
  473.  gtk_widget_show(button8);                           /*显示按钮*/  
  474.     /**************************************************************************************************************/  
  475.  //button9 = gtk_button_new_with_mnemonic("Ln");  
  476.  button9 = gtk_button_new_with_label("Ln");          /*创建按钮*/  
  477.  gtk_table_attach(GTK_TABLE(table1) , button9 , 2 , 3 , 0 , 1 , (GtkAttachOptions)(GTK_FILL) , (GtkAttachOptions)(0) , 0 , 0);  
  478.  gtk_widget_set_size_request(button9 , 70 , 35);     /*设置按钮大小*/  
  479.  gtk_widget_show(button9);                           /*显示按钮*/  
  480.   
  481.  //button10 = gtk_button_new_with_mnemonic("Log");  
  482.  button10 = gtk_button_new_with_label("Log");          /*创建按钮*/  
  483.  gtk_table_attach(GTK_TABLE(table1) , button10 , 2 , 3 , 1 , 2 , (GtkAttachOptions)(GTK_FILL) , (GtkAttachOptions)(0) , 0 , 0);  
  484.  gtk_widget_set_size_request(button10 , 70 , 35);     /*设置按钮大小*/  
  485.  gtk_widget_show(button10);                           /*显示按钮*/  
  486.   
  487.  //button11 = gtk_button_new_with_mnemonic("N!");  
  488.  button11 = gtk_button_new_with_label("N!");          /*创建按钮*/  
  489.  gtk_table_attach(GTK_TABLE(table1) , button11 , 2 , 3 , 2 , 3 , (GtkAttachOptions)(GTK_FILL) , (GtkAttachOptions)(0) , 0 , 0);  
  490.  gtk_widget_set_size_request(button11 , 70 , 35);     /*设置按钮大小*/  
  491.  gtk_widget_show(button11);                           /*显示按钮*/  
  492.   
  493.  //button12 = gtk_button_new_with_mnemonic("1/X");  
  494.  button12 = gtk_button_new_with_label("1/X");          /*创建按钮*/  
  495.  gtk_table_attach(GTK_TABLE(table1) , button12 , 2 , 3 , 3 , 4 , (GtkAttachOptions)(GTK_FILL) , (GtkAttachOptions)(0) , 0 , 0);  
  496.  gtk_widget_set_size_request(button12 , 70 , 35);     /*设置按钮大小*/  
  497.  gtk_widget_show(button12);                           /*显示按钮*/  
  498.     /**************************************************************************************************************/  
  499.  //button13 = gtk_button_new_with_mnemonic("7");  
  500.  button13 = gtk_button_new_with_label("7");          /*创建按钮*/  
  501.  gtk_table_attach(GTK_TABLE(table1) , button13 , 3 , 4 , 0 , 1 , (GtkAttachOptions)(GTK_FILL) , (GtkAttachOptions)(0) , 0 , 0);  
  502.  gtk_widget_set_size_request(button13 , 70 , 35);     /*设置按钮大小*/  
  503.  gtk_widget_show(button13);                           /*显示按钮*/  
  504.   
  505.  //button14 = gtk_button_new_with_mnemonic("4");  
  506.  button14 = gtk_button_new_with_label("4");          /*创建按钮*/  
  507.  gtk_table_attach(GTK_TABLE(table1) , button14 , 3 , 4 , 1 , 2 , (GtkAttachOptions)(GTK_FILL) , (GtkAttachOptions)(0) , 0 , 0);  
  508.  gtk_widget_set_size_request(button14 , 70 , 35);     /*设置按钮大小*/  
  509.  gtk_widget_show(button14);                           /*显示按钮*/  
  510.   
  511.  //button15 = gtk_button_new_with_mnemonic("1");  
  512.  button15 = gtk_button_new_with_label("1");          /*创建按钮*/  
  513.  gtk_table_attach(GTK_TABLE(table1) , button15 , 3 , 4 , 2 , 3 , (GtkAttachOptions)(GTK_FILL) , (GtkAttachOptions)(0) , 0 , 0);  
  514.  gtk_widget_set_size_request(button15 , 70 , 35);     /*设置按钮大小*/  
  515.  gtk_widget_show(button15);                           /*显示按钮*/  
  516.   
  517.  //button16 = gtk_button_new_with_mnemonic("0");  
  518.  button16 = gtk_button_new_with_label("0");          /*创建按钮*/  
  519.  gtk_table_attach(GTK_TABLE(table1) , button16 , 3 , 4 , 3 , 4 , (GtkAttachOptions)(GTK_FILL) , (GtkAttachOptions)(0) , 0 , 0);  
  520.  gtk_widget_set_size_request(button16 , 70 , 35);     /*设置按钮大小*/  
  521.  gtk_widget_show(button16);                           /*显示按钮*/  
  522.     /**************************************************************************************************************/  
  523.  //button17 = gtk_button_new_with_mnemonic("8");  
  524.  button17 = gtk_button_new_with_label("8");          /*创建按钮*/  
  525.  gtk_table_attach(GTK_TABLE(table1) , button17 , 4 , 5 , 0 , 1 , (GtkAttachOptions)(GTK_FILL) , (GtkAttachOptions)(0) , 0 , 0);  
  526.  gtk_widget_set_size_request(button17 , 70 , 35);     /*设置按钮大小*/  
  527.  gtk_widget_show(button17);                           /*显示按钮*/  
  528.   
  529.  //button18 = gtk_button_new_with_mnemonic("5");  
  530.  button18 = gtk_button_new_with_label("5");          /*创建按钮*/  
  531.  gtk_table_attach(GTK_TABLE(table1) , button18 , 4 , 5 , 1 , 2 , (GtkAttachOptions)(GTK_FILL) , (GtkAttachOptions)(0) , 0 , 0);  
  532.  gtk_widget_set_size_request(button18 , 70 , 35);     /*设置按钮大小*/  
  533.  gtk_widget_show(button18);                           /*显示按钮*/  
  534.   
  535.  //button19 = gtk_button_new_with_mnemonic("2");  
  536.  button19 = gtk_button_new_with_label("2");          /*创建按钮*/  
  537.  gtk_table_attach(GTK_TABLE(table1) , button19 , 4 , 5 , 2 , 3 , (GtkAttachOptions)(GTK_FILL) , (GtkAttachOptions)(0) , 0 , 0);  
  538.  gtk_widget_set_size_request(button19 , 70 , 35);     /*设置按钮大小*/  
  539.  gtk_widget_show(button19);                           /*显示按钮*/  
  540.   
  541.  //button20 = gtk_button_new_with_mnemonic("+/-");  
  542.  button20 = gtk_button_new_with_label("+/-");          /*创建按钮*/  
  543.  gtk_table_attach(GTK_TABLE(table1) , button20 , 4 , 5 , 3 , 4 , (GtkAttachOptions)(GTK_FILL) , (GtkAttachOptions)(0) , 0 , 0);  
  544.  gtk_widget_set_size_request(button20 , 70 , 35);     /*设置按钮大小*/  
  545.  gtk_widget_show(button20);                           /*显示按钮*/  
  546.     /**************************************************************************************************************/  
  547.  //button21 = gtk_button_new_with_mnemonic("9");  
  548.  button21 = gtk_button_new_with_label("9");          /*创建按钮*/  
  549.  gtk_table_attach(GTK_TABLE(table1) , button21 , 5 , 6 , 0 , 1 , (GtkAttachOptions)(GTK_FILL) , (GtkAttachOptions)(0) , 0 , 0);  
  550.  gtk_widget_set_size_request(button21 , 70 , 35);     /*设置按钮大小*/  
  551.  gtk_widget_show(button21);                           /*显示按钮*/  
  552.   
  553.  //button22 = gtk_button_new_with_mnemonic("6");  
  554.  button22 = gtk_button_new_with_label("6");          /*创建按钮*/  
  555.  gtk_table_attach(GTK_TABLE(table1) , button22 , 5 , 6 , 1 , 2 , (GtkAttachOptions)(GTK_FILL) , (GtkAttachOptions)(0) , 0 , 0);  
  556.  gtk_widget_set_size_request(button22 , 70 , 35);     /*设置按钮大小*/  
  557.  gtk_widget_show(button22);                           /*显示按钮*/  
  558.   
  559.  //button23 = gtk_button_new_with_mnemonic("3");  
  560.  button23 = gtk_button_new_with_label("3");          /*创建按钮*/  
  561.  gtk_table_attach(GTK_TABLE(table1) , button23 , 5 , 6 , 2 , 3 , (GtkAttachOptions)(GTK_FILL) , (GtkAttachOptions)(0) , 0 , 0);  
  562.  gtk_widget_set_size_request(button23 , 70 , 35);     /*设置按钮大小*/  
  563.  gtk_widget_show(button23);                           /*显示按钮*/  
  564.   
  565.  //button24 = gtk_button_new_with_mnemonic(".");  
  566.  button24 = gtk_button_new_with_label(".");          /*创建按钮*/  
  567.  gtk_table_attach(GTK_TABLE(table1) , button24 , 5 , 6 , 3 , 4 , (GtkAttachOptions)(GTK_FILL) , (GtkAttachOptions)(0) , 0 , 0);  
  568.  gtk_widget_set_size_request(button24 , 70 , 35);     /*设置按钮大小*/  
  569.  gtk_widget_show(button24);                           /*显示按钮*/  
  570.     /**************************************************************************************************************/  
  571.  //button25 = gtk_button_new_with_mnemonic("/");  
  572.  button25 = gtk_button_new_with_label("/");          /*创建按钮*/  
  573.  gtk_table_attach(GTK_TABLE(table1) , button25 , 6 , 7 , 0 , 1 , (GtkAttachOptions)(GTK_FILL) , (GtkAttachOptions)(0) , 0 , 0);  
  574.  gtk_widget_set_size_request(button25 , 70 , 35);     /*设置按钮大小*/  
  575.  gtk_widget_show(button25);                           /*显示按钮*/  
  576.   
  577.  //button26 = gtk_button_new_with_mnemonic("*");  
  578.  button26 = gtk_button_new_with_label("*");          /*创建按钮*/  
  579.  gtk_table_attach(GTK_TABLE(table1) , button26 , 6 , 7 , 1 , 2 , (GtkAttachOptions)(GTK_FILL) , (GtkAttachOptions)(0) , 0 , 0);  
  580.  gtk_widget_set_size_request(button26 , 70 , 35);     /*设置按钮大小*/  
  581.  gtk_widget_show(button26);                           /*显示按钮*/  
  582.   
  583.  //button27 = gtk_button_new_with_mnemonic("-");  
  584.  button27 = gtk_button_new_with_label("-");          /*创建按钮*/  
  585.  gtk_table_attach(GTK_TABLE(table1) , button27 , 6 , 7 , 2 , 3 , (GtkAttachOptions)(GTK_FILL) , (GtkAttachOptions)(0) , 0 , 0);  
  586.  gtk_widget_set_size_request(button27 , 70 , 35);     /*设置按钮大小*/  
  587.  gtk_widget_show(button27);                           /*显示按钮*/  
  588.   
  589.  //button28 = gtk_button_new_with_mnemonic("+");  
  590.  button28 = gtk_button_new_with_label("+");          /*创建按钮*/  
  591.  gtk_table_attach(GTK_TABLE(table1) , button28 , 6 , 7 , 3 , 4 , (GtkAttachOptions)(GTK_FILL) , (GtkAttachOptions)(0) , 0 , 0);  
  592.  gtk_widget_set_size_request(button28 , 70 , 35);     /*设置按钮大小*/  
  593.  gtk_widget_show(button28);                           /*显示按钮*/  
  594.     /**************************************************************************************************************/  
  595.  //button29 = gtk_button_new_with_mnemonic("=");  
  596.  button29 = gtk_button_new_with_label("=");          /*创建按钮*/  
  597.  gtk_table_attach(GTK_TABLE(table1) , button29 , 7 , 8 , 0 , 1 , (GtkAttachOptions)(GTK_FILL) , (GtkAttachOptions)(0) , 0 , 0);  
  598.  gtk_widget_set_size_request(button29 , 70 , 35);     /*设置按钮大小*/  
  599.  gtk_widget_show(button29);                           /*显示按钮*/  
  600.   
  601.  //button30 = gtk_button_new_with_mnemonic("And");  
  602.  button30 = gtk_button_new_with_label("And");          /*创建按钮*/  
  603.  gtk_table_attach(GTK_TABLE(table1) , button30 , 7 , 8 , 1 , 2 , (GtkAttachOptions)(GTK_FILL) , (GtkAttachOptions)(0) , 0 , 0);  
  604.  gtk_widget_set_size_request(button30 , 70 , 35);     /*设置按钮大小*/  
  605.  gtk_widget_show(button30);                           /*显示按钮*/  
  606.   
  607.  //button31 = gtk_button_new_with_mnemonic("Or");  
  608.  button31 = gtk_button_new_with_label("Or");          /*创建按钮*/  
  609.  gtk_table_attach(GTK_TABLE(table1) , button31 , 7 , 8 , 2 , 3 , (GtkAttachOptions)(GTK_FILL) , (GtkAttachOptions)(0) , 0 , 0);  
  610.  gtk_widget_set_size_request(button31 , 70 , 35);     /*设置按钮大小*/  
  611.  gtk_widget_show(button31);                           /*显示按钮*/  
  612.   
  613.  //button32 = gtk_button_new_with_mnemonic("Mod");  
  614.  button32 = gtk_button_new_with_label("Mod");          /*创建按钮*/  
  615.  gtk_table_attach(GTK_TABLE(table1) , button32 , 7 , 8 , 3 , 4 , (GtkAttachOptions)(GTK_FILL) , (GtkAttachOptions)(0) , 0 , 0);  
  616.  gtk_widget_set_size_request(button32 , 70 , 35);     /*设置按钮大小*/  
  617.  gtk_widget_show(button32);                           /*显示按钮*/  
  618.     /**************************************************************************************************************/  
  619.  //button33 = gtk_button_new_with_mnemonic("CR");  
  620.  button33 = gtk_button_new_with_label("CR");          /*创建按钮*/  
  621.  gtk_table_attach(GTK_TABLE(table1) , button33 , 8 , 9 , 0 , 1 , (GtkAttachOptions)(GTK_FILL) , (GtkAttachOptions)(0) , 0 , 0);  
  622.  gtk_widget_set_size_request(button33 , 70 , 35);     /*设置按钮大小*/  
  623.  gtk_widget_show(button33);                           /*显示按钮*/  
  624.   
  625.  //button34 = gtk_button_new_with_mnemonic("Not");  
  626.  button34 = gtk_button_new_with_label("Not");          /*创建按钮*/  
  627.  gtk_table_attach(GTK_TABLE(table1) , button34 , 8 , 9 , 1 , 2 , (GtkAttachOptions)(GTK_FILL) , (GtkAttachOptions)(0) , 0 , 0);  
  628.  gtk_widget_set_size_request(button34 , 70 , 35);     /*设置按钮大小*/  
  629.  gtk_widget_show(button34);                           /*显示按钮*/  
  630.   
  631.  //button35 = gtk_button_new_with_mnemonic("Xor");  
  632.  button35 = gtk_button_new_with_label("Xor");          /*创建按钮*/  
  633.  gtk_table_attach(GTK_TABLE(table1) , button35 , 8 , 9 , 2 , 3 , (GtkAttachOptions)(GTK_FILL) , (GtkAttachOptions)(0) , 0 , 0);  
  634.  gtk_widget_set_size_request(button35 , 70 , 35);     /*设置按钮大小*/  
  635.  gtk_widget_show(button35);                           /*显示按钮*/  
  636.   
  637.  //button36 = gtk_button_new_with_mnemonic("Int");  
  638.  button36 = gtk_button_new_with_label("Int");          /*创建按钮*/  
  639.  gtk_table_attach(GTK_TABLE(table1) , button36 , 8 , 9 , 3 , 4 , (GtkAttachOptions)(GTK_FILL) , (GtkAttachOptions)(0) , 0 , 0);  
  640.  gtk_widget_set_size_request(button36 , 70 , 35);     /*设置按钮大小*/  
  641.  gtk_widget_show(button36);                           /*显示按钮*/  
  642.   
  643. }  
  644.   
  645. /**************************************************************************************************************/  
  646. /*添加事件函数*/  
  647. void addsignal()  
  648. {  
  649.     /*下面的按钮实现数字的输入*/  
  650.     g_signal_connect(G_OBJECT(button1) , "clicked" , G_CALLBACK(input_pi) , NULL);  
  651.  g_signal_connect(G_OBJECT(button13) , "clicked" , G_CALLBACK(input) , NULL);  
  652.  g_signal_connect(G_OBJECT(button14) , "clicked" , G_CALLBACK(input) , NULL);  
  653.  g_signal_connect(G_OBJECT(button15) , "clicked" , G_CALLBACK(input) , NULL);  
  654.  g_signal_connect(G_OBJECT(button16) , "clicked" , G_CALLBACK(input) , NULL);  
  655.  g_signal_connect(G_OBJECT(button17) , "clicked" , G_CALLBACK(input) , NULL);  
  656.  g_signal_connect(G_OBJECT(button18) , "clicked" , G_CALLBACK(input) , NULL);  
  657.  g_signal_connect(G_OBJECT(button19) , "clicked" , G_CALLBACK(input) , NULL);  
  658.  g_signal_connect(G_OBJECT(button21) , "clicked" , G_CALLBACK(input) , NULL);  
  659.  g_signal_connect(G_OBJECT(button22) , "clicked" , G_CALLBACK(input) , NULL);  
  660.  g_signal_connect(G_OBJECT(button23) , "clicked" , G_CALLBACK(input) , NULL);  
  661.   
  662.  /*实现小数点的输入*/  
  663.  g_signal_connect(G_OBJECT(button24) , "clicked" , G_CALLBACK(dot) , NULL);  
  664.  /*实现正负号的输入*/  
  665.  g_signal_connect(G_OBJECT(button20) , "clicked" , G_CALLBACK(Sign) , NULL);  
  666.  /*实现各种运算的输入*/  
  667.  g_signal_connect(G_OBJECT(button2) , "clicked" , G_CALLBACK(Sin), NULL);  
  668.  g_signal_connect(G_OBJECT(button3) , "clicked" , G_CALLBACK(Cos) , NULL);  
  669.  g_signal_connect(G_OBJECT(button4) , "clicked" , G_CALLBACK(Tan) , NULL);  
  670.  g_signal_connect(G_OBJECT(button5) , "clicked" , G_CALLBACK(Exp) , NULL);  
  671.  g_signal_connect(G_OBJECT(button6) , "clicked" , G_CALLBACK(Mathpowxy) , NULL);  
  672.  g_signal_connect(G_OBJECT(button7) , "clicked" , G_CALLBACK(Cube) , NULL);  
  673.  g_signal_connect(G_OBJECT(button8) , "clicked" , G_CALLBACK(Square) , NULL);  
  674.  g_signal_connect(G_OBJECT(button9) , "clicked" , G_CALLBACK(Log_e) , NULL);  
  675.  g_signal_connect(G_OBJECT(button10) , "clicked" , G_CALLBACK(Log_10) , NULL);  
  676.  g_signal_connect(G_OBJECT(button11) , "clicked" , G_CALLBACK(Factorial) , NULL);  
  677.  g_signal_connect(G_OBJECT(button12) , "clicked" , G_CALLBACK(Inverse) , NULL);  
  678.  g_signal_connect(G_OBJECT(button25) , "clicked" , G_CALLBACK(Division) , NULL);  
  679.  g_signal_connect(G_OBJECT(button26) , "clicked" , G_CALLBACK(Mul) , NULL);  
  680.  g_signal_connect(G_OBJECT(button27) , "clicked" , G_CALLBACK(Sub) , NULL);  
  681.  g_signal_connect(G_OBJECT(button28) , "clicked" , G_CALLBACK(Add) , NULL);  
  682.  g_signal_connect(G_OBJECT(button30) , "clicked" , G_CALLBACK(And) , NULL);  
  683.  g_signal_connect(G_OBJECT(button31) , "clicked" , G_CALLBACK(Or) , NULL);  
  684.  g_signal_connect(G_OBJECT(button32) , "clicked" , G_CALLBACK(Mod) , NULL);  
  685.  g_signal_connect(G_OBJECT(button34) , "clicked" , G_CALLBACK(Not) , NULL);  
  686.  g_signal_connect(G_OBJECT(button35) , "clicked" , G_CALLBACK(Xor) , NULL);  
  687.  g_signal_connect(G_OBJECT(button36) , "clicked" , G_CALLBACK(Floor) , NULL);  
  688.  /*实现复位功能*/  
  689.  g_signal_connect(G_OBJECT(button33) , "clicked" , G_CALLBACK(clear) , NULL);  
  690.  /*实现结果输出*/  
  691.  g_signal_connect(G_OBJECT(button29) , "clicked" , G_CALLBACK(output) , NULL);  
  692.  g_signal_connect(G_OBJECT(window) , "delete_envent" , gtk_main_quit , NULL);  
  693. }  
  694.   
  695. /*主函数*/  
  696. int main(int argc , char **argv)  
  697. {  
  698.     a = 0;  
  699.  b = 0;  
  700.  hasdot = 0;  
  701.  gtk_set_locale();  
  702.  gtk_init(&argc , &argv);  
  703.  method = 0;  
  704.    
  705.  interface();                  /*建立界面*/  
  706.    
  707.  addsignal();                  /*添加事件*/  
  708.    
  709.  gtk_widget_show(window);  
  710.    
  711.  gtk_main();  
  712.  return 0;  
  713. }  


代码的运行结果比我的那个好多了,而且基本上该有的错误规避全有了,代码的出处是http://blog.163.com/qingfeng_0818/blog/static/207603219201243172018226/



  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值