jsq.c

#include <gtk/gtk.h>
#include <string.h>
#include <stdio.h>
#include <stdlib.h>
//#define BUFSIZE 1024  //定义临时字符串长度#define w_(builder,type,name) name=GTK_##type(gtk_builder_get_object(builder,#name))double num1;
double num2;//分别代表两个数int flag;   //1表示加法,2表示减法,3表示乘法,4表示除法
int fflag = 0;  //0表示整数,1表示小数//-------------- 载入glade文件,返回GtkBuilder对象----------------GtkBuilder* gtk_load_glade(gchar* filename)
{GtkBuilder *gb;//新建一个GtkBuilder对象gb=gtk_builder_new();//载入文件,失败则返回NULLif(!gtk_builder_add_from_file(gb,filename,NULL))            return NULL;//连接文件中所包含的所有信号gtk_builder_connect_signals(gb,NULL);//返回GtkBuilder对象供后面操作使用 return gb;
}//----- 根据GtkBuilder对象,获得glade中对应的计算器中的控件------
GtkWindow *jsq_window;
GtkEntry *show_entry;
GtkButton *button_add;
GtkButton *button_equal;
GtkButton *button_dot;
GtkButton *button_jian;
GtkButton *button_cheng;
GtkButton *button_chu;
GtkButton *button0;
GtkButton *button1;
GtkButton *button2;
GtkButton *button3;
GtkButton *button4;
GtkButton *button5;
GtkButton *button6;
GtkButton *button7;
GtkButton *button8;
GtkButton *button9;
GtkButton *button0;
GtkButton *button_c;void cal_get_widgets(GtkBuilder* gb)
{w_(gb,WINDOW,jsq_window);   w_(gb,ENTRY,show_entry);w_(gb,BUTTON,button_add);w_(gb,BUTTON,button_equal);w_(gb,BUTTON,button_dot);w_(gb,BUTTON,button_jian);w_(gb,BUTTON,button_cheng);w_(gb,BUTTON,button_chu);w_(gb,BUTTON,button0);w_(gb,BUTTON,button1);w_(gb,BUTTON,button2);w_(gb,BUTTON,button3);w_(gb,BUTTON,button4);w_(gb,BUTTON,button5);w_(gb,BUTTON,button6); w_(gb,BUTTON,button7);w_(gb,BUTTON,button8);w_(gb,BUTTON,button9);w_(gb,BUTTON,button0);     w_(gb,BUTTON,button_c);
}//判断Entry内是否有数字
int HaveNum()
{const gchar* keywords = gtk_entry_get_text(show_entry);char* message;message = (char*)malloc(1024*sizeof(char));sprintf(message, "%s", keywords);if(strlen(message) == 0)//之前没有数字{free(message);return -1;//如果返回-1,则代表Entry内没有数字}free(message);return 0;//返回0代表有数字
}//根据运算符(flag的值)计算结果显示
int get_result()
{//先获取Entry上的数字(第二个数字)const gchar* keywords=gtk_entry_get_text(show_entry);num2 = atof(keywords);//把字符串类型转化成字符型//进行算术运算switch(flag){case 1://+{ if(fflag == 1)//两个数有一个数为小数{gchar message[1024];sprintf(message,"%f",num1+num2);gtk_entry_set_text(show_entry, message);}else if(fflag == 0)//整数{gchar message[1024];sprintf(message,"%d",(int)num1+(int)num2);//转换为整形gtk_entry_set_text(show_entry, message);}break;}case 2://-{if(fflag = 1){gchar message[1024];sprintf(message,"%f",num1-num2);gtk_entry_set_text(show_entry, message);}else if(fflag == 0)//整数{gchar message[1024];sprintf(message,"%d",(int)num1-(int)num2);gtk_entry_set_text(show_entry, message);}break;}case 3://*{if(fflag = 1){gchar message[1024];sprintf(message,"%f",num1*num2);gtk_entry_set_text(show_entry, message);}else if(fflag == 0)//整数{gchar message[1024];sprintf(message,"%d",(int)num1*(int)num2);gtk_entry_set_text(show_entry, message);}break;}case 4:// /{if(fflag = 1){gchar message[1024];sprintf(message,"%f",num1/num2);gtk_entry_set_text(show_entry, message);}else if(fflag == 0)//整数{gchar message[1024];sprintf(message,"%d",(int)num1/(int)num2);gtk_entry_set_text(show_entry, message);}break;}}
}//连续运算函数
void yunsuan(int f)
{/*if(HaveNum() != 0)//空串,不进行任何操作return;*/if(flag != -1)//如果之前有运算符则进行之前的计算,连续运算{get_result();//先进行之前的运算符运算}//先获取当前的数字const gchar* keywords = gtk_entry_get_text(show_entry);num1 = atof(keywords);flag = f;//保存当前算术符号gtk_entry_set_text(show_entry, " ");//清空界面
}//加法
void on_button_add_clicked(GtkObject* widget,gpointer user_data)
{yunsuan(1);
}//减法
void on_button_jian_clicked(GtkObject* widget,gpointer user_data)
{yunsuan(2);
}//乘法
void on_button_cheng_clicked(GtkObject* widget,gpointer user_data)
{yunsuan(3);
}//除法
void on_button_chu_clicked(GtkObject* widget,gpointer user_data)
{yunsuan(4);
}//等号
void on_button_equal_clicked(GtkObject* widget,gpointer user_data)
{get_result();flag = -1;//等号被点击后所有符号被清空,flag变为-1
}//按钮.响应函数
void on_button_dot_clicked(GtkObject* widget,gpointer user_data)
{if(HaveNum() == -1)//在点.之前Entry内没有数字,自动补全0{gtk_entry_set_text(show_entry, "0.");fflag = 1;return;}//如果不为空,则直接添加'.'const gchar* keywords=gtk_entry_get_text(show_entry);gchar message[1024];sprintf(message,"%s%s",keywords,".");gtk_entry_set_text(show_entry, message);fflag = 1;//fflag=1表示小数
}//清除按钮:清楚所有
void on_button_c_clicked(GtkObject* widget,gpointer user_data)
{num1 = 0.0;num2 = 0.0;gtk_entry_set_text(show_entry, " ");
}//按钮9响应函数
void on_button9_clicked(GtkObject* widget,gpointer user_data)
{const gchar* keywords=gtk_entry_get_text(show_entry);gchar message[1024];sprintf(message, "%s%d", keywords, 9);gtk_entry_set_text(show_entry, message);
}//按钮8响应函数
void on_button8_clicked(GtkObject* widget,gpointer user_data)
{const gchar* keywords = gtk_entry_get_text(show_entry);gchar message[1024];sprintf(message, "%s%d", keywords, 8);//合并,把一个串和一个整数合并起来。gtk_entry_set_text(show_entry, message);//message代表合并后的
}//按钮7响应函数
void on_button7_clicked(GtkObject* widget,gpointer user_data)
{const gchar* keywords=gtk_entry_get_text(show_entry);gchar message[1024];sprintf(message, "%s%d", keywords, 7);gtk_entry_set_text(show_entry, message);
}
//按钮6响应函数
void on_button6_clicked(GtkObject* widget,gpointer user_data)
{const gchar* keywords=gtk_entry_get_text(show_entry);gchar message[1024];sprintf(message, "%s%d", keywords, 6);gtk_entry_set_text(show_entry, message);
}//按钮5响应函数
void on_button5_clicked(GtkObject* widget,gpointer user_data)
{const gchar* keywords=gtk_entry_get_text(show_entry);gchar message[1024];sprintf(message, "%s%d", keywords, 5);gtk_entry_set_text(show_entry, message);
}//按钮4响应函数
void on_button4_clicked(GtkObject* widget,gpointer user_data)
{const gchar* keywords=gtk_entry_get_text(show_entry);gchar message[1024];sprintf(message, "%s%d", keywords, 4);gtk_entry_set_text(show_entry, message);
}
//按钮3响应函数
void on_button3_clicked(GtkObject* widget,gpointer user_data)
{const gchar* keywords=gtk_entry_get_text(show_entry);gchar message[1024];sprintf(message, "%s%d", keywords, 3);gtk_entry_set_text(show_entry, message);
}//按钮2响应函数
void on_button2_clicked(GtkObject* widget,gpointer user_data)
{const gchar* keywords=gtk_entry_get_text(show_entry);gchar message[1024];sprintf(message, "%s%d", keywords, 2);gtk_entry_set_text(show_entry, message);
}//按钮1响应函数
void on_button1_clicked(GtkObject* widget,gpointer user_data)
{const gchar* keywords=gtk_entry_get_text(show_entry);gchar message[1024];sprintf(message, "%s%d", keywords, 1);gtk_entry_set_text(show_entry, message);
}//按钮0响应函数
void on_button0_clicked(GtkObject* widget,gpointer user_data)
{const gchar* keywords=gtk_entry_get_text(show_entry);gchar message[1024];sprintf(message, "%s%d", keywords, 0);gtk_entry_set_text(show_entry, message);
}//窗口销毁响应函数
void on_window_jisuanqi_destroy(GtkObject* widget,gpointer user_data)
{gtk_main_quit();
}//----------- 初始化主窗口,即显示计算器图形界面----------------------void cal_widget_init()
{gtk_widget_show(GTK_WIDGET(jsq_window));
}//------------------------- 主函数调用----------------------------------int main(int argc,char* argv[])
{GtkBuilder *gb;gtk_init(&argc,&argv);gb = gtk_load_glade("jisuanqi.glade");if(gb==NULL) return -1;cal_get_widgets(gb);cal_widget_init();gtk_main();return 0;
}

makefile

all:gcc -o jisuanqi jsq.c `pkg-config --cflags --libs gtk+-2.0` -export-dynamicclean:rm -f *~ *.o jisuanqi

Glade实现计算器相关推荐

  1. 怎么用python自制计算公式_手把手教你用python制作简易计算器,能够记录你使用的情况...

    话不多说,首先先看效果图,它能够记录你在使用过程中的历史,方便你查看是否有错: 接下来就仔细分析一下是如何制作的: 简易计算器 第一步:导入资源库 在过程中使用到了tkinter这个资源库,win+R ...

  2. java体重指数计算器程序_java 学习 ——计算器小程序

    简易计算器小程序代码: package jisuanqi; //声明需要插入的包 import java.awt.*; import java.lang.Object; import java.lan ...

  3. c语言计算器实训任务案例,C/C++经典实例之模拟计算器示例代码

    前言 本文主要给大家介绍了关于利用C/C++如何实现模拟计算器的相关内容,分享出来供大家参考学习,下面话不多说了,来一起看看详细的介绍吧. Problem Description 简单计算器模拟:输入 ...

  4. 用计算机计算教学反思,《用计算器计算》教学反思

    <用计算器计算>教学反思 身为一名刚到岗的人民教师,教学是重要的工作之一,写教学反思能总结我们的教学经验,写教学反思需要注意哪些格式呢?下面是小编为大家整理的<用计算器计算>教 ...

  5. pythontkinter真实的例子_python小实例——tkinter实战(计算器)

    相关学习视频:Python Tkinter 绘图项目 - 网易云课堂​study.163.com import tkinter import math import tkinter.messagebo ...

  6. LabVIEW做一款科学计算器

    目录 1.设计思路 2.功能设计 最近学习LabVIEW基础知识,使用其制作一款简易科学计算器,可以实现基本的数学运算功能,效果如下所示: 下载链接:LabVIEW实现科学计算器-嵌入式文档类资源-C ...

  7. 数据结构与算法(3-1)栈(顺序栈、两栈共享空间、链栈、栈的计算器)

    目录 一.顺序栈 存储结构 总代码 二.两栈共享空间 存储结构: 总代码: 三.链栈 存储结构: 总代码: 一.顺序栈 存储结构: 栈特点:先进后出,后进先出.(特殊的线性表) 入栈时在栈顶添加元素, ...

  8. 【机器视觉案例】(5) AI视觉,远程手势控制虚拟计算器,附python完整代码

    各位同学好,今天和大家分享一下如何使用MediaPipe+Opencv完成虚拟计算器,先放张图看效果.FPS值为29,食指和中指距离小于规定阈值则认为点击按键,为避免重复数字出现,规定每20帧可点击一 ...

  9. QT学习第8课:QT计算器界面实现

    声明:此文章仅是个人在学习狄泰QT课程所做的笔记,文章中包含狄泰资料的,一切版权归狄泰软件所有! 第8课是来做一个计算器界面,只是一个界面显示.不过也是挺兴奋的,以前一直对着黑框框,现在终于到界面了. ...

最新文章

  1. IT阅读——关于“业务”
  2. 面试官再问你 HashMap 底层原理,就把这篇文章甩给他看
  3. Logistic Regression
  4. php extname shared,PHP: 编写第一个PHP扩展
  5. 29岁当上北大博导,她成2019年最年轻杰青建议资助人之一
  6. 如何在MySQL中设置外键约束以及外键的作用
  7. 使用Oracle SQL Developer 编写运行 PL/SQL 块
  8. 【零基础学Java】—ArrayList集合概述和基本使用(十四)
  9. HTML5大数据可视化效果(二)可交互地铁线路图
  10. Ubuntu 安装sopcast-player看网络电视
  11. 特征工程之特征选择(3)----F检验和互信息法
  12. 我们是选择开源CRM,还是选择商业CRM?
  13. python 500行 小项目 --- 简单对象模型
  14. pip install:Requirement already satisfied
  15. 第八章JRT/0197-2020金融数据安全数据安全分级指南解读
  16. 随心所欲b超工作站图像处理_正版B超随心所欲超声工作站vista版最新版模拟数字影像软件win7...
  17. xcode iOS 上传appstore 一直卡在正在通过 App Store 进行鉴定
  18. python pandas读取excel时动态确定标题行所在行数
  19. kubernetes安装脚本-非高可用版。一键安装含Master和Node。
  20. 前端自动化测试之chai.js断言库

热门文章

  1. 基于java的ECharts插件使用
  2. Java-单机版的书店管理系统(练习设计模块和思想_系列 六 )
  3. 详述重入锁-ReentrantLock
  4. qt 用海康播放库sdk播放视频
  5. Win7下安装SVN服务端
  6. 瑞熙贝通大型仪器共享预约平台建设方案
  7. 【访问控制-安全标记】自主访问控制和强制访问控制
  8. 苹果手机怎么把中文翻译英文
  9. 8月11日云栖精选夜读:阿里云与神州云计算定制混合云解决方案助企业转型
  10. docker 安装 portainer 并汉化 中文版