LINUX下GTK+实现简单计算器.doc_第1页
LINUX下GTK+实现简单计算器.doc_第2页
LINUX下GTK+实现简单计算器.doc_第3页
LINUX下GTK+实现简单计算器.doc_第4页
LINUX下GTK+实现简单计算器.doc_第5页
已阅读5页,还剩13页未读 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

摘要摘要 随着计算机的越来越普及 学习计算机的人越来越多 作为一个学习计算 机的人员 最基本的那就是必须会编程 但是在微软垄断下的现在的计算机编 程大多是基于 windows 下的编程 设置很多人没听说过或者不会 Linux 下编程 本设计的目的就是为初学 Linux 下编程的人员提供基础的例子 让大家了解 Linux 下的编程 本程序运用 Linux 下的工具 GTK 2 0 作为工具 以 C 语言为核心编写 简单 易懂 GTK 2 0 主要功能有 窗口与简单控件的实现 菜单与工具栏的实现 常用控件的实现 对话框的实现 关键词 关键词 Linux GTK 2 0 Abstract As computers become increasingly popular more and more people learn the computer As a learning computer personnel the most basic that we must be programmed However under the Microsoft monopoly in computer programming is now mostly under the windows based programming Set a lot of people never heard of or will not under Linux programming The purpose of this design is for beginners programming under Linux provides the basis of examples Let everyone know the programming under Linux Window and a simple realization of the control Realization of the menu and tool bar The realization of common control Realization of the dialog box KEYWORDS Linux GTK 2 0 目录 第一章 引言 2 1 1GTK 简介 2 第二章 程序实现 3 2 1 窗口构建 3 2 1 1 基本窗口实现 3 2 1 2 按钮实现 4 2 2 控件 5 2 2 1 按钮盒设置 5 2 2 2 框架设置 5 2 2 3 分割面板 6 2 3 对话框 6 2 3 1 多项选一的窗口 6 2 3 2 创建消息框 6 2 4 综合实现 7 结束语 9 代码 10 1 第一章第一章 引言引言 1 1GTK 简介简介 GTK 最初是 GIMP 的专用开发库 后来发展为 Unix like 系统下开发图形界 面的应用程序的主流开发工具之一 GTK 是自由软件 并且是 GNU 计划的一部 分 GTK 的许可协议是 LGPL GTK GIMP Toolkit 是一套跨多种平台的图形工具包 按 LGPL 许可协议发布的 虽然最初是为 GIMP 写的 但目前已发展为一个功能强大 设计灵活的一个通 用图形库 特别是被 GNOME 选中使得 GTK 广为流传 成为 Linux 下开发图形 界面的应用程序的主流开发工具之一 当然 GTK 并不要求必须在 Linux 上 事 实上 目前 GTK 已经有了成功的 windows 版本 与其他很多部件工具箱不同 GTK 并不基于 Xt 这一决策优劣互见 优 点是 GTK 可以应用于其他系统 其灵活性也很强 而缺点就是它无法利用以 传统方法为 X11 定制的 X 资源数据库 GTK 最早应用于 X Window System 如 今已移植至其他平台 诸如 Microsoft Windows DirectFB 以及 Quartz 在 Mac OS X 使用 GTK 的环境 GNOME 是以 GTK 为基础 就是说为 GNOME 编写的程序使用 GTK 做为其 工具箱 Xfce 也基于 GTK 但是它的应用程序并不对很多其他程序有依赖 这就 是 GNOME 程序 和 GTK 程序 的不同 LXDE 也基于 GTK GPE Palmtop 环境和 Nokia 的互联网平板电脑的框架 Maemo 基于 GTK 这只是一部分 另外 GTK 也可以运行在 KDE 的环境下 而且 GTK 也可 以在 Microsoft Windows 运行 另外还有 DirectFB 和 ncurses 以下程序都是使用 GTK 开发 属于开源软件 可以运行于 Linux Unix Windows Mac 等多种操作系统平台上 Geany 代码编辑器 GIMP 类似于 Photoshop 的图像处理程序 Inkscape 类似于 Illustrator CorelDraw 的矢量图形绘制工具 Pidgin 支持多种协议 IRC Gtalk Yahoo Talk MSN QQ 等等 的聊天 工具 2 第二章第二章 程序实现程序实现 2 1 窗口构建窗口构建 2 1 1 基本窗口实现基本窗口实现 窗口时 GUI 编程中直接面向对用户的操作对象 1 设置 include 文件与声明主函数 首先是 include语句 这是每个 GTK 2 0 程序都要包含的文件 然后是函数声明 int main int argc char argv 这是标准的 C 语言主函数的声明 2 声明变量 GtkWidget window 声明了窗口控件的指针 期中 GtkWidget 是 GTK2 0 控 件类型 window 是变量名 它与变量类型无关 3 初始化 GTK 2 0 的命令行参数 函数 gtk init GtkWdiget create button2 void 5 回调函数的参数 回调函数 on button clicked 它的主要功能是向终端输出一行文字信息 而 且四个按钮的单击信号都连接了这个函数 为了让输出内容不同 每个按钮连 接信号时传递给回调函数的参数都是不同的 如第一个按钮传递的参数是字符 4 串 b1 第二个按钮的参数则是 b2 第三个按钮的参数是 b3 第四个按钮的参 数是 b4 注意的是一定要将字符串强制转换成 gpointer 类型 如 gpointer b4 因 为回调函数接收的参数也是 gpointer 类型的 它为了把字符串显示出来 还需 要将这个指针类型转换为字符串型 如 gchar data 两外如果终端支持中文的 话 参数可以直接设为中文 2 2 控件控件 2 2 1 按钮盒设置按钮盒设置 1 按钮盒的属性 按钮盒的属性有以下几个值 GTK BUTTONBOX DEFAULT STLE 默认排列 GTK BUTTONBOX SPREAD 紧密排列 GTK BUTTONX EDGE 居中排列 GTK BUTTONBOX START 首对其排列 GTK BUTTONBOX END 尾对其排列 2 控件的间隔 由于按钮盒是继承自盒状容器的 所以可以直接使用与盒状容器的相关函 数来操作它 如用函数 gtk box set spacing 来设定按钮盒中按钮之间的空格间 隙 2 2 2 框架设置框架设置 1 框架的外观 可以用函数 gtk frame set shadow type 来设定框架控件的外观轮廓 其第 二个参数为 GtkShadowType 类型 可以取以下几个值 GTK SHADOW NONE 无外框线 GTK SHADOW IN 内向型的外框线 GTK SHADOW OUT 外向型 的外框线 像个按钮 GTK SHADOW ETCHED IN 和 GTK SHADOW ETCHED OUT 一个向内凹一个向外凸 2 纵横比框架控件 纵横比框架控件性能和框架控件在总体上是一致的 只不过它在长宽比例 上是固定的 所以此程序在运行时即使拖长了窗口 它也不好占满整个容器的 空间 可以使用下面函数来设定规范框架的长宽比 Gtk aspect frame set GTK ASPECT FRAME frame 0 0 8 0 8 TRUE 其第二和第三个参数分别表示横向和纵向的位置 取值 0 到 1 之间的浮点 数 其中 0 表示左边 1 表示右边 第四个参数表示纵横比的系数 最后一个 参数表示其子控件是否受其约束 5 框架控件在 GTK 2 0 编程中经常用到 主要起到美化外观和规范其他控件 的作用 2 2 3 分割面板分割面板 向分割面板中加控件 创建分割面板控件用函数 gtk vpanel 纵向 活 gtk hpanel new 横向 来直 接创建 向分隔面板中添加控件也很简单 用函数 gtk panel add1 和 gtk panel add2 就可以实现 期中 add1 表示向分隔面板的第一个容器控件添加 即横向面板的左侧或纵向面板的上部 add2 则依次 2 3 对话框对话框 2 3 1 多项选一的窗口多项选一的窗口 1 创建单选按钮 创建单选按钮有许多个函数 每个函数的第一个参数都是单向链表 GSList 类型的 表示单选按钮所属的组 在创建一组的第一个单选按钮时 可以将此参数设为 NULL 而余下的单选按钮在创建时首先要用 gtk radio button get group 函数来设定单选按钮所属的组 除此之外 还可以用函数 gtk radio button new from widget 来一次创建 一组单选按钮 它的参数是前一单选按钮的控件指针 2 用单选按钮的 clicked 信号加回调函数来显示用户的选择 单选按钮是继承自多选按钮的 单个的单选按钮和多选按钮在功能上是一 样的 2 3 2 创建消息框创建消息框 1 创建消息框控件 消息框控件时 GTK 2 0 中特有的 用 gtk dialog new 函数来创建 他有如 下参数 暂用的父窗口控件 GtkWindow 类型 可以设为 NULL 表示无父窗口 消息框标记 可以取值为 GTK DIALOG MODAL 模态对话框 GTK DIALOG DES TORY WITH PARENT 与父控件一起被销毁 6 GTK DIALOG NO SEPARAOR 在消息框的按钮上面没有分割横线 消息类型 可以取四个宏定义值之一 分别是 GTK MESSAGE INFO 信息 GTK MESSAGE ERROR 错误 GTK MESSAGE WARNING 警告 GTK MESSAGE QUESTION 问题 消息框中的按钮类型 有以下宏定义 GTK BUTTONS NONE 无按钮 GTK BUTTONS OK 确认 GTK BUTTONS CLOSE 关闭 GTK BUTTONS CANCEL 取消 GTK YES NO 是 否按钮 GTK BUTTONS OK CANCLE 确认 取消按钮 格式化的字符串信息 与 g print 活 printf 格式想听的格式化字符串 用于 消息框中现实输出 2 运行消息框 运行消息框用函数 gtk dialog run 此函数的参数是消息框的控件指针 返 回一个整数值 代表消息框运行时用户点击的按钮标记 编程时根据此标记判 断用户的选择 运行结束后直接用 gtk widget destory 函数将其销毁 2 4 综合实现综合实现 1 构件界面 采用一个纵向盒状容器和多个横向盒状容器设计 另外在单行输入控件的 阅读方向属性上用函数 gk widget set direction 设定为 GTK TEXIT DIR RTL 即 从右向左 使此控件的数字显示器更像是一个计算器的显示屏 2 数字按钮的回调函数 数字按钮 0 9 的功能是向计算器输入数字 通过计位和定位 最后显示出 来 所以它们的回调函数都是同一个 只不过是传递的参数根据不同的按钮传 递不同的数字 3 小数点按钮的回调函数 小数点按钮的回调函数是较特殊的一个 首先小数点在一个数中只能出现 一次 再按得话则不起作用 小数地按钮子点击后要对所输入的数字做处理 使之成为浮点数 并且让后续数字也转换为相应的浮点数字 4 运算按钮回调函数 次计算器只有加减乘除四种运算功能 这四个运算按钮用了同一个回调函 数 根据传递的参数设定当前的计算方法 5 等号按钮的回调函数是根据当前的计算方法进行相应的运算 并将计算 结果输出到简单输出控件中 6 清除按钮的回调函数 7 清除按钮的功能是清楚当前显示 同时清楚所有标记 将标记设为默认等 程序多次用到 stdlib H 和 glib 中共的字符串转换成浮点数和浮点数转换成字 符串等转换函数 此外 TK 2 0 编程界面代码占了很大一部分 而且很复杂 但这只是一些 排列控件函数和信号连接宏的简单组合 附程序窗口截图 图 2 4 8 结束语结束语 本文主要简单说明了如何在 Linux 系统中用 GTK 2 0 来实现一个简单的六位 计算功能的计算器 此程序虽然简单 但是涵盖了 GTK 中的很多最基础的诸如 窗口创建 如何在窗口中添加控件 对话框的实现等等知识 就像学习 C 语言一 样 用小的例子来阐释其基本算法 基本思想 然后再引导大家由浅入深的学 习 Linux 平台上的图形界面的编程 本文更详细的说明了几种回调函数的的应 用 如数字按钮的回调函数 运算按钮的回调函数等 程序设计完成后 还需 要进行编译运行 当然 Linux 环境下很多用 gcc 编译 此次也是基于 gcc 但是 可以用 Makefile 自动化编译 可以更综合全面的学习如何编译 Makefile 自 已希望通过这个小程序更好的来学习 Linux 的编程 学习和研究开源软件 将 来在这方面有所成就 9 代码代码 源程序代码 源程序代码 计算器 calc c include include static GtkWidget entry 定义单行输入控件来现实输入输出的数字 gint count 0 计位 gdouble nn 0 计数一 gdouble mm 0 计数二 gint s 0 算法 gboolean first TRUE 首次输入 gboolean have dot FALSE 是否有小数点 gboolean have result FALSE 是否有结果输出 gchar number 100 保持用户输入的数字 void clear all void 清除所有相关标记 gint i gtk entry set text GTK ENTRY entry nn 0 mm 0 s 0 count 0 first TRUE have dot FALSE have result FALSE for i 0 i 100 i number i 0 void on num clicked GtkButton button gpointer data 10 当数字键按下时执行 const gchar num gint i if have result clear all 有结果则全部清除 if count 6 return 够 6 位数则不能再输入数字 count num gtk button get label GTK BUTTON button 取数 i g strlcat number num 100 保持 if first nn strtod number NULL 数一 else mm strtod number NULL 数二 gtk entry set text GTK ENTRY entry number 显示 void on dot clicked GtkButton button gpointer data 当小数点按下时 gint i if have result clear all 全部清除 if have dot FALSE 如果无小数点则可以 have dot TRUE i g strlcat number 100 gtk entry set text GTK ENTRY entry number 如果有小数点则不输出 void on clear clicked GtkButton button gpointer data 11 clear all 全部清除 void on suan clicked GtkButton button gpointer data 当计算按钮 按下时 gint i switch GPOINTER TO INT data case 1 s 1 gtk entry set text GTK ENTRY entry first FALSE count 0 break case 2 s 2 gtk entry set text GTK ENTRY entry first FALSE count 0 break case 3 s 3 gtk entry set text GTK ENTRY entry first FALSE count 0 break case 4 s 4 gtk entry set text GTK ENTRY entry first FALSE count 0 break 12 have dot FALSE for i 0 i 100 i 清除数字 number i 0 void on eq clicked GtkButton button gpointer data 当等号键按钮按下时 double numb gchar num 100 gchar result switch s case 1 numb nn mm break case 2 numb nn mm break case 3 numb nn mm break case 4 numb nn mm break result g ascii dtostr num 100 numb gtk entry set text GTK ENTRY entry result have result TRUE int main int argc char argv 13 GtkWidget window GtkWidget vbox GtkWidget hbox hbox1 hbox2 hbox3 hbox4 GtkWidget button GtkWidget label gtk init window gtk window new GTK WINDOW TOPLEVEL g signal connect G OBJECT window delete event G CALLBACK gtk main quit NULL gtk window set title GTK WINDOW window 璁 畻鍣 gtk window set position GTK WINDOW window GTK WIN POS CENTER gtk container set border width GTK CONTAINER window 10 vbox gtk vbox new FALSE 0 gtk container add GTK CONTAINER window vbox hbox gtk hbox new FALSE 0 gtk box pack start GTK BOX vbox hbox FALSE FALSE 5 label gtk label new 计算器 gtk box pack start GTK BOX hbox label TRUE TRUE 5 button gtk button new with label C gtk box pack start GTK BOX hbox button TRUE TRUE 5 g signal connect G OBJECT button clicked G CALLBACK on clear clicked NULL entry gtk entry new gtk widget set direction entry GTK TEXT DIR RTL gtk box pack start GTK BOX vbox entry FALSE FALSE 5 hbox1 gtk hbox new FALSE 0 gtk box pack start GTK BOX vbox hbox1 FALSE FALSE 5 button gtk button new with label 3 gtk box pack start GTK BOX hbox1 button TRUE TRUE 5 g signal connect G OBJECT button clicked 14 G CALLBACK on num clicked NULL button gtk button new with label 2 gtk box pack start GTK BOX hbox1 button TRUE TRUE 5 g signal connect G OBJECT button clicked G CALLBACK on num clicked NULL button gtk button new with label 1 gtk box pack start GTK BOX hbox1 button TRUE TRUE 5 g signal connect G OBJECT button clicked G CALLBACK on num clicked NULL button gtk button new with label g signal connect G OBJECT button clicked G CALLBACK on suan clicked gpointer 1 gtk box pack start GTK BOX hbox1 button TRUE TRUE 5 hbox2 gtk hbox new FALSE 0 gtk box pack start GTK BOX vbox hbox2 FALSE FALSE 5 button gtk button new with label 6 g signal connect G OBJECT button clicked G CALLBACK on num clicked NULL gtk box pack start GTK BOX hbox2 button TRUE TRUE 5 button gtk button new with label 5 g signal connect G OBJECT button clicked G CALLBACK on num clicked NULL gtk box pack start GTK BOX hbox2 button TRUE TRUE 5 button gtk button new with label 4 g signal connect G OBJECT button clicked G CALLBACK on num clicked NULL gtk box pack start GTK BOX hbox2 button TRUE TRUE 5 button gtk button new with label g signal connect G OBJECT button clicked G CALLBACK on suan clicked gpointer 2 gtk box pack start GTK BOX hbox2 button TRUE TRUE 5 hbox3 gtk hbox new FALSE 0 15 gtk box pack start GTK BOX vbox hbox3 FALSE FALSE 5 button gtk button new with label 9 g signal connect G OBJECT button clicked G CALLBACK on num clicked NULL gtk box pack start GTK BOX hbox3 button TRUE TRUE 5 button gtk button new with label 8 g signal connect G OBJECT button clicked G CALLBACK on num clicked NULL gtk box pack start GTK BOX hbox3 button TRUE TRUE 5 button gtk b

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论