接下来,我们做一个布局练习。例如以下图:

我们用表格布局实现,表格布局參考坐标例如以下:

这里我们用到行编辑控件( GtkEntry )。

行编辑的创建:

GtkWidget * gtk_entry_new(void);

返回值:行编辑指针行

编辑内容的设置:

void gtk_entry_set_text (GtkEntry *entry,const gchar *text);

entry: 行编辑

text: 须要设置的内容

设置行编辑是否同意编辑:

void gtk_editable_set_editable(GtkEditable *editable, gboolean is_editable);

editable:行编辑

is_editable:TRUE代表可编辑。FALSE不同意编辑

完整代码例如以下:

 #include <gtk/gtk.h>

 int main(int argc,char *argv[])
{
//1.gtk环境初始化
gtk_init(&argc, &argv); //2.创建一个窗体
GtkWidget *window = gtk_window_new(GTK_WINDOW_TOPLEVEL); //3.创建一个表格容器5行4列
GtkWidget *table = gtk_table_new(5,4,TRUE);
//将table增加到window中
gtk_container_add(GTK_CONTAINER(window), table); //4.创建一个行编辑
GtkWidget *entry = gtk_entry_new();
//设置行编辑的内容
gtk_entry_set_text(GTK_ENTRY(entry), "2+2=4");
//设置行编辑不同意编辑,仅仅能显示用
gtk_editable_set_editable(GTK_EDITABLE(entry), FALSE); //5.创建多个按钮
GtkWidget *button0 = gtk_button_new_with_label("0");//数值键0
GtkWidget *button1 = gtk_button_new_with_label("1");//数值键1
GtkWidget *button2 = gtk_button_new_with_label("2");//数值键2
GtkWidget *button3 = gtk_button_new_with_label("3");//数值键3
GtkWidget *button4 = gtk_button_new_with_label("4");//数值键4
GtkWidget *button5 = gtk_button_new_with_label("5");//数值键5
GtkWidget *button6 = gtk_button_new_with_label("6");//数值键6
GtkWidget *button7 = gtk_button_new_with_label("7");//数值键7
GtkWidget *button8 = gtk_button_new_with_label("8");//数值键8
GtkWidget *button9 = gtk_button_new_with_label("9");//数值键9 GtkWidget *button_add = gtk_button_new_with_label("+");//加号
GtkWidget *button_minus = gtk_button_new_with_label("-");//减号
GtkWidget *button_mul = gtk_button_new_with_label("*");//乘号
GtkWidget *button_div = gtk_button_new_with_label("/");//除号
GtkWidget *button_equal = gtk_button_new_with_label("=");//等号
GtkWidget *button_delete = gtk_button_new_with_label("c");//退格键 //6.布局将上面的按钮均放入table容器中
gtk_table_attach_defaults(GTK_TABLE(table), entry, 0, 4, 0, 1); gtk_table_attach_defaults(GTK_TABLE(table), button0, 0, 1, 4, 5);
gtk_table_attach_defaults(GTK_TABLE(table), button1, 0, 1, 3, 4);
gtk_table_attach_defaults(GTK_TABLE(table), button2, 1, 2, 3, 4);
gtk_table_attach_defaults(GTK_TABLE(table), button3, 2, 3, 3, 4);
gtk_table_attach_defaults(GTK_TABLE(table), button4, 0, 1, 2, 3);
gtk_table_attach_defaults(GTK_TABLE(table), button5, 1, 2, 2, 3);
gtk_table_attach_defaults(GTK_TABLE(table), button6, 2, 3, 2, 3);
gtk_table_attach_defaults(GTK_TABLE(table), button7, 0, 1, 1, 2);
gtk_table_attach_defaults(GTK_TABLE(table), button8, 1, 2, 1, 2);
gtk_table_attach_defaults(GTK_TABLE(table), button9, 2, 3, 1, 2); gtk_table_attach_defaults(GTK_TABLE(table), button_add, 1, 2, 4, 5);
gtk_table_attach_defaults(GTK_TABLE(table), button_minus, 2, 3, 4, 5);
gtk_table_attach_defaults(GTK_TABLE(table), button_mul , 3, 4, 2, 3);
gtk_table_attach_defaults(GTK_TABLE(table), button_div, 3, 4, 3, 4);
gtk_table_attach_defaults(GTK_TABLE(table), button_equal, 3, 4, 4, 5);
gtk_table_attach_defaults(GTK_TABLE(table), button_delete, 3, 4, 1, 2); //7.显示全部控件
gtk_widget_show_all(window); //8.主事件循环
gtk_main(); return 0;
}

执行结果:

源码下载:http://download.csdn.net/download/lianghe_work/8934943

转自:

GTK入门学习:布局练习之计算器的更多相关文章

  1. GTK入门学习:布局容器之固定布局

    前面我们学习的水平.垂直和表格布局容器,控件会跟着容器大小的变化进行自己主动适应.而固定布局容器里的控件则不会跟着变化( 则固定不变 ). 固定布局的创建: GtkWidget *gtk_fixed_ ...

  2. GTK入门学习:布局容器之水平布局

    假设我们希望窗体里多放加入几个控件,直接加入是不成功的.由于窗体仅仅能容纳一个控件的容器. 这时候.我们须要借助布局容器,我们先把布局容器加入到窗体里.然后再把所须要加入的控件放在布局容器里. 布局容 ...

  3. GTK入门学习:glade的使用

    搭建好环境后,在终端敲 glade 就可以启动glade工具. glade的总体框图: 经常使用控件选择区:列举了经常使用的控件,经常使用的有三类:顶层(主窗体等).容器(各种布局容器等).控制和显示 ...

  4. 微信小程序入门学习-- 简易Demo:计算器

    简单学习下微信小程序 官网 简易教程 · 小程序 https://mp.weixin.qq.com/debug/wxadoc/dev/ 需要通过开发者工具,来完成小程序创建和代码编辑. 下载安装,运行 ...

  5. PyQt4入门学习笔记(三)

    # PyQt4入门学习笔记(三) PyQt4内的布局 布局方式是我们控制我们的GUI页面内各个控件的排放位置的.我们可以通过两种基本方式来控制: 1.绝对位置 2.layout类 绝对位置 这种方式要 ...

  6. 【数据库】7.0 MySQL入门学习(七)——MySQL基本指令:帮助、清除输入、查询等

    1.0 help == ? 帮助指令,查询某个指令的解释.用法.说明等.详情参考博文: [数据库]6.0 MySQL入门学习(六)——MySQL启动与停止.官方手册.文档查询 https://www. ...

  7. Android Camera2 拍照入门学习

    原文:Android Camera2 拍照入门学习 学习资料: 肾虚将军android camera2 详解说明 极客学院android.hardware.camera2 使用指南 Android 5 ...

  8. 第15.18节 PyQt(Python+Qt)入门学习:Model/View架构中视图Item Views父类详解

    老猿Python博文目录 老猿Python博客地址 一.概述 在PyQt图形界面中,支持采用Model/View架构实现数据和界面逻辑分离,其中Model用于处理数据存储,View用于界面数据展现,当 ...

  9. Jetpack Compose学习(5)——从登录页美化开始学习布局组件使用

    原文:Jetpack Compose学习(5)--从登录页美化开始学习布局组件使用 | Stars-One的杂货小窝 本篇主要讲解常用的布局,会与原生Android的布局控件进行对比说明,请确保了解A ...

随机推荐

  1. PHP经典面试题目汇总(上篇)

    1.双引号和单引号的区别 双引号解释变量,单引号不解释变量 双引号里插入单引号,其中单引号里如果有变量的话,变量解释 双引号的变量名后面必须要有一个非数字.字母.下划线的特殊字符,或者用{}讲变量括起 ...

  2. 【bzoj4031】[HEOI2015]小Z的房间 矩阵树定理

    题目描述 你突然有了一个大房子,房子里面有一些房间.事实上,你的房子可以看做是一个包含n*m个格子的格状矩形,每个格子是一个房间或者是一个柱子.在一开始的时候,相邻的格子之间都有墙隔着. 你想要打通一 ...

  3. Python Base Three

    //sixth day to study python(2016/8/7) 32. In python , there are have an special type dictionary , it ...

  4. 【bzoj1406】 AHOI2007密码箱 数论

    在一次偶然的情况下,小可可得到了一个密码箱,听说里面藏着一份古代流传下来的藏宝图,只要能破解密码就能打开箱子,而箱子背面刻着的古代图标,就是对密码的提示.经过艰苦的破译,小可可发现,这些图标表示一个数 ...

  5. python 粘包问题及解决方法

    一粘包 TCP协议是面向对象的,面向流的,提高可靠性服务.使用了优化算法,Nagle算法.将多次间隔较少且数据量小的数据,合并成一个大的数据块,然后进行封包.这样接收端就很难分辨出来.TCP协议数据是 ...

  6. hust 1605 - Gene recombination(bfs+字典树)

    1605 - Gene recombination Time Limit: 2s Memory Limit: 64MB Submissions: 264 Solved: 46 DESCRIPTION ...

  7. poj 3468 线段树成段更新

    A Simple Problem with Integers Time Limit: 5000MS   Memory Limit: 131072K Total Submissions: 54012   ...

  8. 集合工具类CollectionUtils、ListUtils、SetUtils、MapUtils探究(转)

    之前一直以为集合工具类只有CollectionUtils,主要用它的isEmpty(final Collection<?> coll)静态方法来判断一个给定的集合是否为null或者是否长度 ...

  9. c#.net分类上升达人~~~呵呵。。。

    原文发布时间为:2008-11-11 -- 来源于本人的百度文章 [由搬家工具导入] 觉得自己蛮无聊的~~~~~~~~~(>_<)~~~~

  10. 慕课 python 操作数据库2 银行转账实例

    CREATE TABLE `account` ( `acctid` ) DEFAULT NULL COMMENT '账户ID', `) DEFAULT NULL COMMENT '余额' ) ENGI ...