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

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

这里我们用到行编辑控件( 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. oracle无参数和带参数的存储过程实例

    SQL中调用存储过程语句:call procedure_name(); 注:调用时”()”是不可少的,无论是有参数还是无参数. 定义对数据库存储过程的调用时1.无参数存储过程:{call proced ...

  2. Spring整合Junit进行单元测试

    I. 加入依赖包 Spring Test (如spring-test-2.5.4.jar) JUnit 4 Spring 其他相关包 II.新建Junit Test Case III.读取配置文件 @ ...

  3. HashSet源码分析 jdk1.6

    Set的特点:Set元素无顺序,且元素不可以重复. 1.定义 public class HashSet<E> extends AbstractSet<E> implements ...

  4. 用Javascript实现图片的缓慢缩放效果

    <body> <!--页面布局:一张图片两个按钮--> <div style = "width:400px;margin:0 auto"> &l ...

  5. BZOJ1227 [SDOI2009]虔诚的墓主人 【树状数组】

    题目 小W 是一片新造公墓的管理人.公墓可以看成一块N×M 的矩形,矩形的每个格点,要么种着一棵常青树,要么是一块还没有归属的墓地.当地的居民都是非常虔诚的基督徒,他们愿意提前为自己找一块合适墓地.为 ...

  6. 【CCF】最优灌溉 最小生成树

    [AC] #include<iostream> #include<cstdio> #include<string> #include<cstring> ...

  7. Java面试题之ArrayList和LinkedList的区别

    先看下类图: 相同点: 都实现了List接口和Collection: 不同点: 1.ArrayList是基于数组实现的:LinkedList是基于链表实现的: 2.ArrayList随机查询速度快:L ...

  8. BeanFactory到WebApplicationContext的结构 以及bean和spring容器的关系

    BeanFactory: Ioc 容器 ApplicationContext: Spring容器 WebApplicationContext需要ServletContext实例,也就是说它必须在拥有W ...

  9. STL学习笔记(七) 程序中使用STL

    条款43:算法调用优先于手写循环 class Widget { public: bool test(); }; vector<Widget> vec; 算法调用: for_each(vec ...

  10. SHUoj 字符串进制转换

    字符串进制转换 发布时间: 2017年7月9日 18:17   最后更新: 2017年7月9日 21:17   时间限制: 1000ms   内存限制: 128M 描述 Claire Redfield ...