第133页的gtk+编程例子——计算器应用改写网上的例子用gtk4编译

news2024/11/19 8:37:00

第133页的gtk+编程例子——计算器应用改写网上的例子用gtk4编译
来源:《GTK的计算器》
https://blog.csdn.net/zhouzhouzf/article/details/17097999

例子程序是在gtk2.0编译的,之前修改许多地方才能在gtk3.0编译通过,如今再修改能在gtk4编译通过
使用gtk2.0编译要安装gtk2-devel,使用gtk3.0编译要安装gtk3-devel,使用gtk4.0编译要安装gtk4-devel,注意pkg-config --cflags gtk4是gtk4,而不是gtk±4.0
在openSUSE-Leap-15.5-DVD-x86_64的gnome41.8桌面环境下编译的,其中pkg-config --cflags gtk4两边有反引号括起来的,pkg-config --libs gtk4也是一样两边有反引号括起来的,因为报错undefined reference to symbol ‘exp@@GLIBC_2.29’,所以一定要加上-lm选项,> mistake.text 2>&1 ; gedit mistake.text表示将编译过程的错误信息保存到文本文件mistake.text,编译完成后马上打开查看

ruhong@localhost:~/gtk/calculator> gcc -g -Wall -lm pkg-config --cflags gtk4 -o zhouzhouzf4 zhouzhouzf4.c pkg-config --libs gtk4 > mistake.text 2>&1 ; gedit mistake.text
ruhong@localhost:~/gtk/calculator> ./zhouzhouzf4

#include <gtk/gtk.h>
#include <math.h>
#include <string.h>
#include <stdlib.h>
#include <stdio.h>
 
double a , b;
int hasdot;        /*是否有小数点*/
int method;        /*区别不同的运算*/
char out[20] = "0";

GtkWidget *entry1;
GtkEntryBuffer *buffer1;
/* 在gtk4中entry与text_view一样有buffer,文字内容存储在buffer中,操作buffer才能改变文字内容 */
/**************************************************************************************************************/
/*双目运算函数*/
void Binary_Operator( )
{
    char num[20];
    strcpy(num , gtk_entry_buffer_get_text(GTK_ENTRY_BUFFER(buffer1)));
 if( a == 0 )                                        /*如果没有第一个数,则存储为第一个数*/
 {
     gtk_entry_buffer_set_text(GTK_ENTRY_BUFFER(buffer1), "", -1);
        a = atof(num);                                  /*字符串转换成浮点型*/
 }
 else
 {
        b = atof(num);
 }
 hasdot = 0;                                         /*表示没有小数点*/
}
 
/*单目运算的结果输出*/
void Right_output()
{
    char num[20];
 gcvt(a , 32 , num);                                /*运算结果浮点型转换成字符串*/
 gtk_entry_buffer_set_text(GTK_ENTRY_BUFFER(buffer1), num, -1);       /*直接显示结果*/
 a = 0;
 b = 0;
 method = 0;
}
 
/*递归函数求阶乘*/
float fun(int c)
{
    float d;
 if( c == 0 || c == 1 )
  d = 1;
 else
  d = fun(c - 1)*c;
 
 return d;
}
 
/*双目运算的结果输出*/
void output()
{
    char num[20] = "0";
 strcpy(num , gtk_entry_buffer_get_text(GTK_ENTRY_BUFFER(buffer1)));  /*取得文本框的内容*/
 b = atof(num);                                         /*字符型转换成浮点型*/
 switch( method )
 {
        case 0:
   a = a + b ; Right_output() ; break ;           /*+*/
  case 1:
   a = a - b ; Right_output() ; break ;           /*-*/
  case 2:
   a = a * b ; Right_output() ; break ;           /***/
  case 3:
   if( b == 0 )
   {
                a = 0;
    b = 0;
    method = 0;
    gtk_entry_buffer_set_text(GTK_ENTRY_BUFFER(buffer1), "Remainder can't for 0!", -1);
   }
   else
   {
                a = a / b ; Right_output() ;               /*/*/
   } break;
  case 4:
   a = pow(a , b) ; Right_output() ; break;       /*pow 算a的b次幂X^Y*/
  case 5:
   a = ((int )a) & ((int )b) ; Right_output() ; break;  /*& and*/
  case 6:
   a = ((int )a) | ((int )b) ; Right_output() ; break;  /*| or*/
  case 7:
   a = ((int )a) ^ ((int )b) ; Right_output() ; break;  /*^ 异或 xor*/
  case 8:
   if( b == 0 )
   {
                a = 0;
    b = 0;
    method = 0;
    gtk_entry_buffer_set_text(GTK_ENTRY_BUFFER(buffer1), "Remainder can't for 0!", -1);
   }
   else
   {
                a = ((int )a) % ((int )b); Right_output();       /*%取模(取余) mod*/
   } break;
  case 9:
   a = sin( b ); Right_output() ; break;                /*sin*/
  case 10:
   a = cos( b ); Right_output() ; break;                /*cos*/
  case 11:
   a = tan( b ); Right_output() ; break;                /*tan*/
  case 12:
   a = exp( b ); Right_output() ; break;                /*exp*/
  case 13:
   a = b * b * b; Right_output() ; break;               /*X^3*/
  case 14:
   a = b * b; Right_output() ; break;                   /*X^2*/
  case 15:
   if( b <= 0 )
   {
                a = 0 ;
    b = 0 ;
    method = 0 ;
    gtk_entry_buffer_set_text(GTK_ENTRY_BUFFER(buffer1), "Logarithm must be positive !", -1);
   }
   else
   {
                a = log( b ); Right_output();                    /*log*/
   } break;
  case 16:
   if( b <= 0 )
   {
                a = 0;
    b = 0;
    method = 0;
    gtk_entry_buffer_set_text(GTK_ENTRY_BUFFER(buffer1), "Logarithm must be positive !", -1);
   }
   else
      {
                a = log10( b ); Right_output();                  /*ln*/
   } break;
  case 17:
   if( b < 0 )
   {
                a = 0;
    b = 0;
    method = 0;
    gtk_entry_buffer_set_text(GTK_ENTRY_BUFFER(buffer1), "Function input is invalid,must be>=0 !", -1);
   }
   else
   {
                a = fun((int)(b)); Right_output();              /*n!*/
   } break;
  case 18:
   if( b == 0 )
   {
                a = 0 ;
    b = 0 ;
    method = 0;
    gtk_entry_buffer_set_text(GTK_ENTRY_BUFFER(buffer1), "Divisor can't for 0 !", -1);
   }
   else
   {
                a = 1 / b; Right_output();                      /*1/X*/
   } break;
  case 19:
   a = ~((int )b); Right_output(); break;              /*not 取反*/
  case 20:
   a = floor(b) ; Right_output(); break;       /*int取整floor返回小于或等于指定表达式的最大整数*/
  default: break;
 }
}
 
/**************************************************************************************************************/
/*加法运算*/
void Add(GtkWidget *widget , gpointer data)
{
    method = 0;
 Binary_Operator();
}
 
/*减法运算*/
void Sub(GtkWidget *widget , gpointer data)
{
    method = 1;
 Binary_Operator();
}
 
/*乘法运算*/
void Mul(GtkWidget *widget , gpointer data)
{
    method = 2;
 Binary_Operator();
}
 
/*除法运算*/
void Division(GtkWidget *widget , gpointer data)
{
    method = 3;
 Binary_Operator();
}
 
/*exp 幂运算*/
void Mathpowxy(GtkWidget *widget , gpointer data)
{
    method = 4;
 Binary_Operator();
}
 
/*and 逻辑与*/
void And(GtkWidget *widget , gpointer data)
{
    method = 5;
 Binary_Operator();
}
 
/*or 逻辑或*/
void Or(GtkWidget *widget , gpointer data)
{
    method = 6;
 Binary_Operator();
}
 
/*xor逻辑异或 */
void Xor(GtkWidget *widget , gpointer data)
{
    method = 7;
 Binary_Operator();
}
 
/*Mod 模运算(取余)*/
void Mod(GtkWidget *widget , gpointer data)
{
    method = 8;
 Binary_Operator();
}
/**************************************************************************************************************/
 
/*sin*/
void Sin(GtkWidget *widget , gpointer data)
{
    method = 9;
 output();
}
 
/*cos*/
void Cos(GtkWidget *widget , gpointer data)
{
    method = 10;
 output();
}
 
/*tan*/
void Tan(GtkWidget *widget , gpointer data)
{
    method = 11;
 output();
}
 
/*exp*/
void Exp(GtkWidget *widget , gpointer data)
{
    method = 12;
 output();
}
 
/*X^3 立方*/
void Cube(GtkWidget *widget , gpointer data)
{
    method = 13;
 output();
}
 
/*X^2 平方*/
void Square(GtkWidget *widget , gpointer data)
{
    method = 14;
 output();
}
 
/*log_e*/
void Log_e(GtkWidget *widget , gpointer data)
{
    method = 15;
 output();
}
 
/*Log_10*/
void Log_10(GtkWidget *widget , gpointer data)
{
    method = 16;
 output();
}
 
/*N!*/
void Factorial(GtkWidget *widget , gpointer data)
{
    method = 17;
 output();
}
 
/*1/X*/
void Inverse(GtkWidget *widget , gpointer data)
{
    method = 18;
 output();
}
 
/*not逻辑非*/
void Not(GtkWidget *widget , gpointer data)
{
    method = 19;
 output();
}
 
/*int 取整*/
void Floor(GtkWidget *widget , gpointer data)
{
    method = 20;
 output();
}
/**************************************************************************************************************/
 
/*.小数点*/
void dot(GtkWidget *widget , gpointer data)
{
    if( hasdot == 0 )
    {
		  const gchar *entry_text = gtk_entry_buffer_get_text(GTK_ENTRY_BUFFER(buffer1));		/*从显示器提取现有的文本*/
        gint pos = strlen(entry_text);				/*计算现有的文本字符个数*/
        gtk_entry_buffer_insert_text (GTK_ENTRY_BUFFER(buffer1), pos, gtk_button_get_label(GTK_BUTTON(widget)), -1);
        	     /*大概意思是叠加后面键入的内容gtk_button_get_label(GTK_BUTTON(widget),与之前键入的内容合在一起,-1表示不限制加入内容的长度,&pos是指在现有的文本的第pos个字符的后面加入 */
  hasdot = 1;                            /*表示有一个小数点*/
 }
}
 
/*正负选择+/-*/
void Sign(GtkWidget *widget , gpointer data)
{
    char num[20];
 float c;
 strcpy(num , gtk_entry_buffer_get_text(GTK_ENTRY_BUFFER(buffer1)));    /*取得文本框的内容*/
 c = atof(num);                                           /*字符型转换成浮点型*/
 c = -c;
 gcvt(c , 32 , num);                                      /*浮点型转换成字符型*/
 gtk_entry_buffer_set_text(GTK_ENTRY_BUFFER(buffer1), num, -1);             /*显示结果*/
}
 
/*清除函数CR*/
void clear(GtkWidget *widget , gpointer data)
{
    gtk_entry_buffer_set_text(GTK_ENTRY_BUFFER(buffer1), "", -1);
 hasdot = 0;
 a = 0;
 b = 0;
 method = 0;
}
 
/*输入函数*/
void input(GtkWidget *widget , gpointer data)
{
    const gchar *entry_text = gtk_entry_buffer_get_text(GTK_ENTRY_BUFFER(buffer1));
    gint pos = strlen(entry_text);
    gtk_entry_buffer_insert_text (GTK_ENTRY_BUFFER(buffer1), pos, gtk_button_get_label(GTK_BUTTON(widget)), -1);
}
 
/*pi*/
void input_pi(GtkWidget *widget , gpointer data)
{
    gtk_entry_buffer_set_text(GTK_ENTRY_BUFFER(buffer1), "3.1415926535897932384626433832795", -1);
}
 
  
/* 程序主体 */
static void
activate (GtkApplication *app, gpointer user_data)
{

 a = 0;
 b = 0;
 hasdot = 0;
 method = 0;
 
GtkWidget *window;
GtkWidget *vbox;
GtkWidget *label1;
GtkWidget *grid1;
GtkWidget *button1;
GtkWidget *button2;
GtkWidget *button3;
GtkWidget *button4;
GtkWidget *button5;
GtkWidget *button6;
GtkWidget *button7;
GtkWidget *button8;
GtkWidget *button9;
GtkWidget *button10;
GtkWidget *button11;
GtkWidget *button12;
GtkWidget *button13;
GtkWidget *button14;
GtkWidget *button15;
GtkWidget *button16;
GtkWidget *button17;
GtkWidget *button18;
GtkWidget *button19;
GtkWidget *button20;
GtkWidget *button21;
GtkWidget *button22;
GtkWidget *button23;
GtkWidget *button24;
GtkWidget *button25;
GtkWidget *button26;
GtkWidget *button27;
GtkWidget *button28;
GtkWidget *button29;
GtkWidget *button30;
GtkWidget *button31;
GtkWidget *button32;
GtkWidget *button33;
GtkWidget *button34;
GtkWidget *button35;
GtkWidget *button36;
 
 window = gtk_application_window_new(app);       /*创建一个窗口*/
 gtk_window_set_title(GTK_WINDOW(window) , "My Calculator"); /*为窗口添加标题*/
 
 vbox = gtk_box_new(GTK_ORIENTATION_VERTICAL, 0);          /*创建垂直框*/
 gtk_window_set_child (GTK_WINDOW(window), vbox);    /*把垂直框添加到窗口中*/
 gtk_widget_show(vbox);                              /*显示垂直框*/
 
 entry1 = gtk_entry_new();                           /*创建一个文本框*/
 buffer1 = gtk_entry_get_buffer(GTK_ENTRY (entry1));
 gtk_box_append (GTK_BOX(vbox) , entry1);/*把文本框添加到垂直框中*/
 gtk_widget_show(entry1);                            /*显示文本框*/
 
 label1 = gtk_label_new("        10  calculate        ");                           /*创建一个标签*/
 gtk_box_append (GTK_BOX(vbox) , label1);/*把标签添加到垂直框中*/
 gtk_widget_show(label1);                            /*显示垂直框*/
 
 grid1 = gtk_grid_new();              /*创建一个表格*/
 gtk_box_append (GTK_BOX(vbox) , grid1);/*表格添加到垂直框中*/
 gtk_widget_show(grid1);                            /*显示表格*/
    /**************************************************************************************************************/
 //button1 = gtk_button_new_with_mnemonic("Pi");
 button1 = gtk_button_new_with_label("Pi");          /*创建按钮*/
 gtk_grid_attach(GTK_GRID(grid1) , button1 , 0 , 0, 1 , 1 );
 gtk_widget_set_size_request(button1 , 70 , 35);     /*设置按钮大小*/
 gtk_widget_show(button1);                           /*显示按钮*/
 
    //button2 = gtk_button_new_with_mnemonic("Sin");
 button2 = gtk_button_new_with_label("Sin");          /*创建按钮*/
 gtk_grid_attach(GTK_GRID(grid1) , button2 , 0 , 1 , 1 , 1 );
 gtk_widget_set_size_request(button2 , 70 , 35);     /*设置按钮大小*/
 gtk_widget_show(button2);                           /*显示按钮*/
 
 //button3 = gtk_button_new_with_mnemonic("Cos");
 button3 = gtk_button_new_with_label("Cos");          /*创建按钮*/
 gtk_grid_attach(GTK_GRID(grid1) , button3 , 0 , 2 , 1 , 1 );
 gtk_widget_set_size_request(button3 , 70 , 35);     /*设置按钮大小*/
 gtk_widget_show(button3);                           /*显示按钮*/
 
 //button4 = gtk_button_new_with_mnemonic("Tan");
 button4 = gtk_button_new_with_label("Tan");          /*创建按钮*/
 gtk_grid_attach(GTK_GRID(grid1) , button4 , 0 , 3 , 1 , 1 );
 gtk_widget_set_size_request(button4 , 70 , 35);     /*设置按钮大小*/
 gtk_widget_show(button4);                           /*显示按钮*/
    /**************************************************************************************************************/
 //button5 = gtk_button_new_with_mnemonic("Exp");
 button5 = gtk_button_new_with_label("Exp");          /*创建按钮*/
 gtk_grid_attach(GTK_GRID(grid1) , button5 , 1 , 0 , 1 , 1 );
 gtk_widget_set_size_request(button5 , 70 , 35);     /*设置按钮大小*/
 gtk_widget_show(button5);                           /*显示按钮*/
 
 //button6 = gtk_button_new_with_mnemonic("X^Y");
 button6 = gtk_button_new_with_label("X^Y");          /*创建按钮*/
 gtk_grid_attach(GTK_GRID(grid1) , button6 , 1 , 1 , 1 , 1 );
 gtk_widget_set_size_request(button6 , 70 , 35);     /*设置按钮大小*/
 gtk_widget_show(button6);                           /*显示按钮*/
 
 //button7 = gtk_button_new_with_mnemonic("X^3");
 button7 = gtk_button_new_with_label("X^3");          /*创建按钮*/
 gtk_grid_attach(GTK_GRID(grid1) , button7 , 1 , 2 , 1 , 1 );
 gtk_widget_set_size_request(button7 , 70 , 35);     /*设置按钮大小*/
 gtk_widget_show(button7);                           /*显示按钮*/
 
 //button8 = gtk_button_new_with_mnemonic("X^2");
 button8 = gtk_button_new_with_label("X^2");          /*创建按钮*/
 gtk_grid_attach(GTK_GRID(grid1) , button8 , 1 , 3 , 1 , 1 );
 gtk_widget_set_size_request(button8 , 70 , 35);     /*设置按钮大小*/
 gtk_widget_show(button8);                           /*显示按钮*/
    /**************************************************************************************************************/
 //button9 = gtk_button_new_with_mnemonic("Ln");
 button9 = gtk_button_new_with_label("Ln");          /*创建按钮*/
 gtk_grid_attach(GTK_GRID(grid1) , button9 , 2 , 0 , 1 , 1 );
 gtk_widget_set_size_request(button9 , 70 , 35);     /*设置按钮大小*/
 gtk_widget_show(button9);                           /*显示按钮*/
 
 //button10 = gtk_button_new_with_mnemonic("Log");
 button10 = gtk_button_new_with_label("Log");          /*创建按钮*/
 gtk_grid_attach(GTK_GRID(grid1) , button10 , 2 , 1 , 1 , 1 );
 gtk_widget_set_size_request(button10 , 70 , 35);     /*设置按钮大小*/
 gtk_widget_show(button10);                           /*显示按钮*/
 
 //button11 = gtk_button_new_with_mnemonic("N!");
 button11 = gtk_button_new_with_label("N!");          /*创建按钮*/
 gtk_grid_attach(GTK_GRID(grid1) , button11 , 2 , 2 , 1 , 1 );
 gtk_widget_set_size_request(button11 , 70 , 35);     /*设置按钮大小*/
 gtk_widget_show(button11);                           /*显示按钮*/
 
 //button12 = gtk_button_new_with_mnemonic("1/X");
 button12 = gtk_button_new_with_label("1/X");          /*创建按钮*/
 gtk_grid_attach(GTK_GRID(grid1) , button12 , 2 , 3 , 1 , 1 );
 gtk_widget_set_size_request(button12 , 70 , 35);     /*设置按钮大小*/
 gtk_widget_show(button12);                           /*显示按钮*/
    /**************************************************************************************************************/
 //button13 = gtk_button_new_with_mnemonic("7");
 button13 = gtk_button_new_with_label("7");          /*创建按钮*/
 gtk_grid_attach(GTK_GRID(grid1) , button13 , 3 , 0 , 1 , 1 );
 gtk_widget_set_size_request(button13 , 70 , 35);     /*设置按钮大小*/
 gtk_widget_show(button13);                           /*显示按钮*/
 
 //button14 = gtk_button_new_with_mnemonic("4");
 button14 = gtk_button_new_with_label("4");          /*创建按钮*/
 gtk_grid_attach(GTK_GRID(grid1) , button14 , 3 , 1 , 1 , 1 );
 gtk_widget_set_size_request(button14 , 70 , 35);     /*设置按钮大小*/
 gtk_widget_show(button14);                           /*显示按钮*/
 
 //button15 = gtk_button_new_with_mnemonic("1");
 button15 = gtk_button_new_with_label("1");          /*创建按钮*/
 gtk_grid_attach(GTK_GRID(grid1) , button15 , 3 , 2 , 1 , 1 );
 gtk_widget_set_size_request(button15 , 70 , 35);     /*设置按钮大小*/
 gtk_widget_show(button15);                           /*显示按钮*/
 
 //button16 = gtk_button_new_with_mnemonic("0");
 button16 = gtk_button_new_with_label("0");          /*创建按钮*/
 gtk_grid_attach(GTK_GRID(grid1) , button16 , 3 , 3 , 1 , 1 );
 gtk_widget_set_size_request(button16 , 70 , 35);     /*设置按钮大小*/
 gtk_widget_show(button16);                           /*显示按钮*/
    /**************************************************************************************************************/
 //button17 = gtk_button_new_with_mnemonic("8");
 button17 = gtk_button_new_with_label("8");          /*创建按钮*/
 gtk_grid_attach(GTK_GRID(grid1) , button17 , 4 , 0 , 1 , 1 );
 gtk_widget_set_size_request(button17 , 70 , 35);     /*设置按钮大小*/
 gtk_widget_show(button17);                           /*显示按钮*/
 
 //button18 = gtk_button_new_with_mnemonic("5");
 button18 = gtk_button_new_with_label("5");          /*创建按钮*/
 gtk_grid_attach(GTK_GRID(grid1) , button18 , 4 , 1 , 1 , 1 );
 gtk_widget_set_size_request(button18 , 70 , 35);     /*设置按钮大小*/
 gtk_widget_show(button18);                           /*显示按钮*/
 
 //button19 = gtk_button_new_with_mnemonic("2");
 button19 = gtk_button_new_with_label("2");          /*创建按钮*/
 gtk_grid_attach(GTK_GRID(grid1) , button19 , 4 , 2 , 1 , 1 );
 gtk_widget_set_size_request(button19 , 70 , 35);     /*设置按钮大小*/
 gtk_widget_show(button19);                           /*显示按钮*/
 
 //button20 = gtk_button_new_with_mnemonic("+/-");
 button20 = gtk_button_new_with_label("+/-");          /*创建按钮*/
 gtk_grid_attach(GTK_GRID(grid1) , button20 , 4 , 3 , 1 , 1 );
 gtk_widget_set_size_request(button20 , 70 , 35);     /*设置按钮大小*/
 gtk_widget_show(button20);                           /*显示按钮*/
    /**************************************************************************************************************/
 //button21 = gtk_button_new_with_mnemonic("9");
 button21 = gtk_button_new_with_label("9");          /*创建按钮*/
 gtk_grid_attach(GTK_GRID(grid1) , button21 , 5 , 0 , 1 , 1 );
 gtk_widget_set_size_request(button21 , 70 , 35);     /*设置按钮大小*/
 gtk_widget_show(button21);                           /*显示按钮*/
 
 //button22 = gtk_button_new_with_mnemonic("6");
 button22 = gtk_button_new_with_label("6");          /*创建按钮*/
 gtk_grid_attach(GTK_GRID(grid1) , button22 , 5 , 1 , 1 , 1 );
 gtk_widget_set_size_request(button22 , 70 , 35);     /*设置按钮大小*/
 gtk_widget_show(button22);                           /*显示按钮*/
 
 //button23 = gtk_button_new_with_mnemonic("3");
 button23 = gtk_button_new_with_label("3");          /*创建按钮*/
 gtk_grid_attach(GTK_GRID(grid1) , button23 , 5 , 2 , 1 , 1 );
 gtk_widget_set_size_request(button23 , 70 , 35);     /*设置按钮大小*/
 gtk_widget_show(button23);                           /*显示按钮*/
 
 //button24 = gtk_button_new_with_mnemonic(".");
 button24 = gtk_button_new_with_label(".");          /*创建按钮*/
 gtk_grid_attach(GTK_GRID(grid1) , button24 , 5 , 3 , 1 , 1 );
 gtk_widget_set_size_request(button24 , 70 , 35);     /*设置按钮大小*/
 gtk_widget_show(button24);                           /*显示按钮*/
    /**************************************************************************************************************/
 //button25 = gtk_button_new_with_mnemonic("/");
 button25 = gtk_button_new_with_label("/");          /*创建按钮*/
 gtk_grid_attach(GTK_GRID(grid1) , button25 , 6 , 0 , 1 , 1 );
 gtk_widget_set_size_request(button25 , 70 , 35);     /*设置按钮大小*/
 gtk_widget_show(button25);                           /*显示按钮*/
 
 //button26 = gtk_button_new_with_mnemonic("*");
 button26 = gtk_button_new_with_label("*");          /*创建按钮*/
 gtk_grid_attach(GTK_GRID(grid1) , button26 , 6 , 1 , 1 , 1 );
 gtk_widget_set_size_request(button26 , 70 , 35);     /*设置按钮大小*/
 gtk_widget_show(button26);                           /*显示按钮*/
 
 //button27 = gtk_button_new_with_mnemonic("-");
 button27 = gtk_button_new_with_label("-");          /*创建按钮*/
 gtk_grid_attach(GTK_GRID(grid1) , button27 , 6 , 2 , 1 , 1 );
 gtk_widget_set_size_request(button27 , 70 , 35);     /*设置按钮大小*/
 gtk_widget_show(button27);                           /*显示按钮*/
 
 //button28 = gtk_button_new_with_mnemonic("+");
 button28 = gtk_button_new_with_label("+");          /*创建按钮*/
 gtk_grid_attach(GTK_GRID(grid1) , button28 , 6 , 3 , 1 , 1 );
 gtk_widget_set_size_request(button28 , 70 , 35);     /*设置按钮大小*/
 gtk_widget_show(button28);                           /*显示按钮*/
    /**************************************************************************************************************/
 //button29 = gtk_button_new_with_mnemonic("=");
 button29 = gtk_button_new_with_label("=");          /*创建按钮*/
 gtk_grid_attach(GTK_GRID(grid1) , button29 , 7 , 0 , 1 , 1 );
 gtk_widget_set_size_request(button29 , 70 , 35);     /*设置按钮大小*/
 gtk_widget_show(button29);                           /*显示按钮*/
 
 //button30 = gtk_button_new_with_mnemonic("And");
 button30 = gtk_button_new_with_label("And");          /*创建按钮*/
 gtk_grid_attach(GTK_GRID(grid1) , button30 , 7 , 1 , 1 , 1 );
 gtk_widget_set_size_request(button30 , 70 , 35);     /*设置按钮大小*/
 gtk_widget_show(button30);                           /*显示按钮*/
 
 //button31 = gtk_button_new_with_mnemonic("Or");
 button31 = gtk_button_new_with_label("Or");          /*创建按钮*/
 gtk_grid_attach(GTK_GRID(grid1) , button31 , 7 , 2 , 1 , 1 );
 gtk_widget_set_size_request(button31 , 70 , 35);     /*设置按钮大小*/
 gtk_widget_show(button31);                           /*显示按钮*/
 
 //button32 = gtk_button_new_with_mnemonic("Mod");
 button32 = gtk_button_new_with_label("Mod");          /*创建按钮*/
 gtk_grid_attach(GTK_GRID(grid1) , button32 , 7 , 3 , 1 , 1 );
 gtk_widget_set_size_request(button32 , 70 , 35);     /*设置按钮大小*/
 gtk_widget_show(button32);                           /*显示按钮*/
    /**************************************************************************************************************/
 //button33 = gtk_button_new_with_mnemonic("CR");
 button33 = gtk_button_new_with_label("CR");          /*创建按钮*/
 gtk_grid_attach(GTK_GRID(grid1) , button33 , 8 , 0 , 1 , 1 );
 gtk_widget_set_size_request(button33 , 70 , 35);     /*设置按钮大小*/
 gtk_widget_show(button33);                           /*显示按钮*/
 
 //button34 = gtk_button_new_with_mnemonic("Not");
 button34 = gtk_button_new_with_label("Not");          /*创建按钮*/
 gtk_grid_attach(GTK_GRID(grid1) , button34 , 8 , 1 , 1 , 1 );
 gtk_widget_set_size_request(button34 , 70 , 35);     /*设置按钮大小*/
 gtk_widget_show(button34);                           /*显示按钮*/
 
 //button35 = gtk_button_new_with_mnemonic("Xor");
 button35 = gtk_button_new_with_label("Xor");          /*创建按钮*/
 gtk_grid_attach(GTK_GRID(grid1) , button35 , 8 , 2 , 1 , 1 );
 gtk_widget_set_size_request(button35 , 70 , 35);     /*设置按钮大小*/
 gtk_widget_show(button35);                           /*显示按钮*/
 
 //button36 = gtk_button_new_with_mnemonic("Int");
 button36 = gtk_button_new_with_label("Int");          /*创建按钮*/
 gtk_grid_attach(GTK_GRID(grid1) , button36 , 8 , 3 , 1 , 1 );
 gtk_widget_set_size_request(button36 , 70 , 35);     /*设置按钮大小*/
 gtk_widget_show(button36);                           /*显示按钮*/
 
    /*下面的按钮实现数字的输入*/
 g_signal_connect( button1 , "clicked" , G_CALLBACK(input_pi) , NULL);
 g_signal_connect( button13 , "clicked" , G_CALLBACK(input) , NULL);
 g_signal_connect( button14 , "clicked" , G_CALLBACK(input) , NULL);
 g_signal_connect( button15 , "clicked" , G_CALLBACK(input) , NULL);
 g_signal_connect( button16 , "clicked" , G_CALLBACK(input) , NULL);
 g_signal_connect( button17 , "clicked" , G_CALLBACK(input) , NULL);
 g_signal_connect( button18 , "clicked" , G_CALLBACK(input) , NULL);
 g_signal_connect( button19 , "clicked" , G_CALLBACK(input) , NULL);
 g_signal_connect( button21 , "clicked" , G_CALLBACK(input) , NULL);
 g_signal_connect( button22 , "clicked" , G_CALLBACK(input) , NULL);
 g_signal_connect( button23 , "clicked" , G_CALLBACK(input) , NULL);
 
 /*实现小数点的输入*/
 g_signal_connect( button24 , "clicked" , G_CALLBACK(dot) , NULL);
 /*实现正负号的输入*/
 g_signal_connect( button20 , "clicked" , G_CALLBACK(Sign) , NULL);
 /*实现各种运算的输入*/
 g_signal_connect( button2 , "clicked" , G_CALLBACK(Sin), NULL);
 g_signal_connect( button3 , "clicked" , G_CALLBACK(Cos) , NULL);
 g_signal_connect( button4 , "clicked" , G_CALLBACK(Tan) , NULL);
 g_signal_connect( button5 , "clicked" , G_CALLBACK(Exp) , NULL);
 g_signal_connect( button6 , "clicked" , G_CALLBACK(Mathpowxy) , NULL);
 g_signal_connect( button7 , "clicked" , G_CALLBACK(Cube) , NULL);
 g_signal_connect( button8 , "clicked" , G_CALLBACK(Square) , NULL);
 g_signal_connect( button9 , "clicked" , G_CALLBACK(Log_e) , NULL);
 g_signal_connect( button10 , "clicked" , G_CALLBACK(Log_10) , NULL);
 g_signal_connect( button11 , "clicked" , G_CALLBACK(Factorial) , NULL);
 g_signal_connect( button12 , "clicked" , G_CALLBACK(Inverse) , NULL);
 g_signal_connect( button25 , "clicked" , G_CALLBACK(Division) , NULL);
 g_signal_connect( button26 , "clicked" , G_CALLBACK(Mul) , NULL);
 g_signal_connect( button27 , "clicked" , G_CALLBACK(Sub) , NULL);
 g_signal_connect( button28 , "clicked" , G_CALLBACK(Add) , NULL);
 g_signal_connect( button30 , "clicked" , G_CALLBACK(And) , NULL);
 g_signal_connect( button31 , "clicked" , G_CALLBACK(Or) , NULL);
 g_signal_connect( button32 , "clicked" , G_CALLBACK(Mod) , NULL);
 g_signal_connect( button34 , "clicked" , G_CALLBACK(Not) , NULL);
 g_signal_connect( button35 , "clicked" , G_CALLBACK(Xor) , NULL);
 g_signal_connect( button36 , "clicked" , G_CALLBACK(Floor) , NULL);
 /*实现复位功能*/
 g_signal_connect( button33 , "clicked" , G_CALLBACK(clear) , NULL);
 /*实现结果输出*/
 g_signal_connect( button29 , "clicked" , G_CALLBACK(output) , NULL);
 
 gtk_widget_show(window);
 
}
int
main (int argc, char **argv)
{
	GtkApplication *app;
	/* 声明变量app为GtkApplication类型 */
	int status;
	/* 声明变量status为整数十制进数字类型 */
	app = gtk_application_new ("org.gtk.example", G_APPLICATION_FLAGS_NONE);
	/* 创建程序app使用名称为org.gtk.example,当glib版本小于2.74时用G_APPLICATION_FLAGS_NONE,当glib版本大于2.74时用G_APPLICATION_DEFAULT_FLAGS */
	g_signal_connect (app, "activate", G_CALLBACK (activate), NULL);
	/*  为程序app加上动作,当收到activate信号,就启动activate事件,跳转运行activate函数体  */
	status = g_application_run (G_APPLICATION (app), argc, argv);
	g_object_unref (app);
	return status;
}

效果图如下
在这里插入图片描述

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/813350.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

进阶高级测试专项,Pytest自动化测试框架总结(三)

目录&#xff1a;导读 前言一、Python编程入门到精通二、接口自动化项目实战三、Web自动化项目实战四、App自动化项目实战五、一线大厂简历六、测试开发DevOps体系七、常用自动化测试工具八、JMeter性能测试九、总结&#xff08;尾部小惊喜&#xff09; 前言 1、pytest前置条件…

谈一谈缓存穿透,击穿,雪崩

缓存穿透 缓存穿透是指在使用缓存系统时&#xff0c;频繁查询一个不存在于缓存中的数据&#xff0c;导致这个查询每次都要通过缓存层去查询数据源&#xff0c;无法从缓存中获得结果。这种情况下&#xff0c;大量的请求会直接穿透缓存层&#xff0c;直接访问数据源&#xff0c;…

04 http连接处理(上)

基础知识&#xff1a;epoll、http报文格式、状态码和有限状态机 代码&#xff1a;对服务端处理http请求的全部流程进行简要介绍&#xff0c;然后结合代码对http类及请求接收进行详细分析。 epoll epoll_create函数 #include <sys/epoll.h> int epoll_create(int size)…

深度学习实践——模型部署优化实践

系列实验 深度学习实践——卷积神经网络实践&#xff1a;裂缝识别 深度学习实践——循环神经网络实践 深度学习实践——模型部署优化实践 深度学习实践——模型推理优化练习 源码&#xff1a; 1. 对应的github地址 https://github.com/Asionm/streamlit_demo 2. 对应的gitee地…

Session、Cookie 与 Application

目录 简介cookiecookie生命周期 sessionsession生命周期 application 简介 cookie、seesion、application三个都会缓存我们用户状态的数据&#xff0c;使得我们在浏览器访问网站时可以更快速的获取到信息。 主要原因在于HTTP协议是无状态的&#xff0c;我们每次访问服务器&…

软考05根据内存区域大小计算芯片数量

文章目录 前言一、原题二、解题思路1.计算内存区域的大小2.计算每个存储器芯片的容量3.计算芯片数量 总结 前言 从网上看题答案是有了&#xff0c;但是不知道具体的计算过程就很难受&#xff0c;不然下次还是不会&#xff0c;只能自己梳理了 一、原题 二、解题思路 1.计算内存…

ANR底层源码分析之Service篇

ANR底层源码分析之Service篇 一、前言二、Service-ANR原理2.1 Service启动ANR原理简述2.2 前台Service VS 后台Service的区别2.2.1 前台Service2.2.3 后台Service 2.3 Service启动ANR源码执行过程2.3.1 ActiveServices#bringUpServiceLocked2.3.2 ActiveServices#realStartServ…

数据安全

数据的备份与恢复 1. 数据备份技术 任何数据在长期使用过程中&#xff0c;都存在一定的安全隐患。由于认为操作失误或系统故障&#xff0c;例如认为错误、程序出错、计算机失效、灾难和偷窃&#xff0c;经常造成数据丢失&#xff0c;给个人和企业造成灾难性的影响。在这种情况…

LeetCode 刷题 数据结构 数组 27 移除元素

难度&#xff1a;简单 给你一个数组 nums 和一个值 val&#xff0c;你需要 原地 移除所有数值等于 val 的元素&#xff0c;并返回移除后数组的新长度。 不要使用额外的数组空间&#xff0c;你必须仅使用 O(1) 额外空间并 原地 修改输入数组。 元素的顺序可以改变。你不需要考虑…

SpringBoot自动装配介绍

SpringBoot是对Spring的一种扩展&#xff0c;其中比较重要的扩展功能就是自动装配&#xff1a;通过注解对常用的配置做默认配置&#xff0c;简化xml配置内容。本文会对Spring的自动配置的原理和部分源码进行解析&#xff0c;本文主要参考了Spring的官方文档。 自动装配的组件 …

西安科技大学:励志图存,自强不息

今天就让我带着大家一起来看“采矿冶金历史悠久&#xff0c;安全工程国重学科”的西安科技大学吧&#xff01; 一、高校概况 西安科技大学&#xff08;Xi’an University of Science and Technology&#xff09;&#xff0c;简称西科大、西安科大&#xff0c;位于陕西省西安市…

算法通关村第二关——指定区间反转的问题解析

题目类型 指定区间反转 题目描述 给你单链表的头指针 head 和两个整数left 和right &#xff0c;其中left < right 。请反转从位置left到位置right的链表节点&#xff0c;返回反转后的链表 示例 输入&#xff1a;head [1,2,3,4,5] , left 2 , right 4 输出&#xff1a;[…

「网络编程」传输层协议_ TCP协议学习_及原理深入理解(二 - 完结)[万字详解]

「前言」文章内容大致是传输层协议&#xff0c;TCP协议讲解的第二篇&#xff0c;续上篇TCP。 「归属专栏」网络编程 「主页链接」个人主页 「笔者」枫叶先生(fy) 目录 二、TCP协议2.9 TCP连接管理机制2.9.1 三次握手2.9.2 四次挥手2.9.3 演示查看TIME_WAIT和CLOSE_WAIT状态2.9.…

基于SpringBoot+Vue的车辆充电桩管理系统设计与实现(源码+LW+部署文档等)

博主介绍&#xff1a; 大家好&#xff0c;我是一名在Java圈混迹十余年的程序员&#xff0c;精通Java编程语言&#xff0c;同时也熟练掌握微信小程序、Python和Android等技术&#xff0c;能够为大家提供全方位的技术支持和交流。 我擅长在JavaWeb、SSH、SSM、SpringBoot等框架…

MOS管的体二极管是怎么形成的

一般MOS管的源极和漏极之间会存在体二极管&#xff0c;对于N沟道的MOS管&#xff0c;体二极管由源极指向漏极。 对于PMOS管&#xff0c;体二极管由漏极指向源极&#xff0c;那么MOS管为什么会有这个体二极管呢&#xff1f; 我们看到这个N沟道MOS管的结构&#xff0c;源极和漏极…

单片机第一季:零基础12——I2C和EEPROM

目录 1&#xff0c;EEPROM 2&#xff0c;I2C 2.1&#xff0c;I2C物理层 2.2&#xff0c;I2C协议层 3&#xff0c;AT24C02介绍 4&#xff0c;代码 1&#xff0c;EEPROM 为什么需要EEPROM&#xff1f; 单片机内部的ROM只能在程序下载时进行擦除和改写&#xff0c;但是…

西安电子科技大学计算机考研分析

关注我们的微信公众号 姚哥计算机考研 更多详情欢迎咨询 西安电子科技大学&#xff08;A-&#xff09;考研难度&#xff08;☆☆☆☆&#xff09; 西安电子科技大学计算机科学与技术学院&#xff08;国家示范性软件学院&#xff09;始于1958年中央军委批复设立的导弹系统专用…

17 反显、修改、提交图书信息功能实战

前言 上节回顾 上一节&#xff0c;我们针对图书列表做了实战练习&#xff0c;主体内容包括顶部的检索区域&#xff0c;中间的el-table数据区域&#xff0c;和底部的el-pagination分页区域&#xff0c;并针对每一块做了讲解&#xff0c;还不太明白上下文的同学可以回过头去看一…

Linux标准库API

目录 1.字符串函数 2.数据转换函数 3.格式化输入输出函数 4.权限控制函数 5.IO函数 6.进程控制函数 7.文件和目录函数 1.字符串函数 2.数据转换函数 3.格式化输入输出函数 #include<stdarg.h>void test(const char * format , ...){va_list ap;va_start(ap,format…

自监督去噪:Noise2Noise原理及实现(Pytorch)

文章地址&#xff1a;https://arxiv.org/abs/1803.04189 ICML github 代码: https://github.com/NVlabs/noise2noise 本文整理和参考代码: https://github.com/shivamsaboo17/Deep-Restore-PyTorch 文章目录 1. 理论背景2. 实验结果3. 代码实现(1) 网络结构(2) 数据加载(3) 网络…