首先了解下gtk中函数的定义格式:

记住下面几个格式看,下面的代码

声明变量:GtkAbc*abc=gtk_abc_new()声明控件;

赋值:gtk_abc_set_label(controlName,value);

添加到父容器:gtk_container_add(controFather,controlChildl);

显示控件:gtk_widget_show(controlName);

一般默认值:gtk_box_pack_start()的后三个 值,一般为FALSE,FALSE,0

 

1.盒子布局(垂直和水平)

 

#include <stdio.h>
#include<gtk/gtk.h>
int main(int argc, char *argv[])
{
//初始化gtk
gtk_init(NULL,NULL);
//定义一个指向window的指针
GtkWindow*window=gtk_window_new(GTK_WINDOW_TOPLEVEL);
//窗体关闭之后执行
g_signal_connect(window,"destroy",gtk_main_quit,NULL);
//设置标题
gtk_window_set_title(window,"标题");
//每个被添加的控件都要有show
gtk_widget_show(window); //添加一个box,使用垂直布局
//GTK_ORIENTATION_HORIZONTAL为水平布局
GtkBox*box=gtk_box_new(GTK_ORIENTATION_VERTICAL,0);
gtk_container_add(window,box);
gtk_widget_show(box); GtkLabel*lb1=gtk_label_new("盒子布局");
gtk_container_add(box,lb1);
gtk_box_pack_start(box,lb1,FALSE,FALSE,0);
gtk_widget_show(lb1); GtkEntry*entry1=gtk_entry_new();
gtk_container_add(box,entry1);
gtk_box_pack_start(box,entry1,FALSE,FALSE,0);
gtk_widget_show(entry1); GtkButton*btn1=gtk_button_new();
gtk_button_set_label(btn1,"按钮一");
gtk_container_add(box,btn1);
gtk_box_pack_start(box,btn1,FALSE,FALSE,0);
gtk_widget_show(btn1); gtk_main(); return 0;
}

运行结果如下

2.网格布局

原理:

gtk_grid_attach(grid1,btn1,1,2,3,4):

grid1表示父容器;

btn1表示被添加的控件;

1表示该控件距离左边一个网格;

2表示该控件距离上边两个网格;

3表示该控件占据3个网格的宽度;

4表示该控件占据4个网格的高度;

记住几句话:

1.网格布局的关键词是Grid

2.gtk_button_set_label()表示赋值,赋值用 set_label()

3.gtk_container_add()要在gtk_grid_attach()之后写

4.所有新创建的控件,都要有show的方法

5.如果涉及到布局,都要有附加到布局的方法

#include <stdio.h>
#include<gtk/gtk.h>
int main(int argc, char *argv[])
{
gtk_init(NULL,NULL);
GtkWindow*window=gtk_window_new(GTK_WINDOW_TOPLEVEL);
gtk_window_set_title(window,"网格布局");
g_signal_connect(window,"destroy",gtk_main_quit,NULL);
gtk_widget_show(window);
//创建一个控件变量
GtkGrid*grid1=gtk_grid_new();
//添加到父容器
gtk_container_add(window,grid1);
//显示控件
gtk_widget_show(grid1); //创建一个控件变量
GtkButton*btn1=gtk_button_new();
//为控件赋值
gtk_button_set_label(btn1,"111111");
//绑定到布局中
gtk_grid_attach(grid1,btn1,1,1,1,1);
//添加到父容器
gtk_container_add(grid1,btn1);
//显示控件
gtk_widget_show(btn1); //创建一个空间变量
GtkButton*btn2=gtk_button_new();
//给该控件赋值
gtk_button_set_label(btn2,"222222");
//绑定到布局中
gtk_grid_attach(grid1,btn2,0,0,1,1);
//添加到父容器中
gtk_container_add(grid1,btn2);
//显示控件
gtk_widget_show(btn2); gtk_main();
return 0;
}

运行结果如下图

今天,就写这么多了;我的目标并不高,希望每天写一篇,具体细节等学习深入了,再慢慢补充。

C语言学习(2)-GTK布局的更多相关文章

  1. 5332盛照宗 如何获取新技能+c语言学习调查

    如何获取新技能+c语言学习调查 你有什么技能比大多人(超过90%以上)更好? 如果问我有没有什么技能比大多数人,并且是90%的人好,我还真不敢说有,因为世界上有70亿人,要比63亿人做的好才行啊.我也 ...

  2. 20155332 如何获取新技能+c语言学习调查

    如何获取新技能+c语言学习调查 你有什么技能比大多人(超过90%以上)更好? 如果问我有没有什么技能比大多数人,并且是90%的人好,我还真不敢说有,因为世界上有70亿人,要比63亿人做的好才行啊.我也 ...

  3. C语言学习 第八次作业总结

    本次作业其实没有新的内容,主要就是复习上一次的一维数组的相关内容.冯老师布置了5道题目,其中涉及到一些比较简单的排序或者是查找的方法.因为数据很少,所以直接使用for循环遍历就可以了. 关于本次作业, ...

  4. C语言学习 第七次作业总结

    C语言学习 第七次作业总结 数组可以分为数组和多下标数组(在传统的国内C语言书本中,将其称为二/多维数组). 数组名称 在之前的课程中,大家应该都有印象,对于int a这样的定义,会为变量 a 声明一 ...

  5. 技能收获与C语言学习

    你有什么技能比大多人(超过90%以上)更好? 我会的东西很多,喜欢的东西太多,但是很遗憾广而不专,会而不精.学了很多东西我都是为了娱乐,因为以前我们那里过于强调学习,很多爱好也都被扼杀在摇篮里.我觉得 ...

  6. 一份关于Swift语言学习资源的整理文件

    一份关于Swift语言学习资源的整理文件     周银辉 在这里下载 https://github.com/ipader/SwiftGuide

  7. go语言学习笔记

    Go语言学习基本类型Bool 取值范围:true,false (不可以用数字代替)Int/uint 根据平台可能为32或64位int8/uint8 长度:1字节 取值范围-128~127/0~255b ...

  8. 20155206赵飞技能获取经验,C语言学习感想与对JAVA的学习目标

    自己较强的技能获取经验. 1:实话实说我自己是没有哪个技能可以超过90%的人的,只有自认为做的还可以的一些事情,例如打篮球,office软件的应用,一百米跑.至于其他方面就是很平庸了. 2:经验主要有 ...

  9. HTML语言学习笔记(会更新)

    # HTML语言学习笔记(会更新) 一个html文件是由一系列的元素和标签组成的. 标签: 1.<html></html> 表示该文件为超文本标记语言(HTML)编写的.成对出 ...

随机推荐

  1. Layui选项卡、进度条、面板、徽章、时间线、辅助元素

    Layui选项卡.进度条.面板.徽章.时间线.辅助元素 Tab选项卡 - 页面元素    导航菜单可应用于头部和侧边,Tab选项卡提供多套风格,支持响应式,支持删除选项卡等功能.面包屑结构简单,支持自 ...

  2. [bzoj2251][2010BeiJing Wc]外星联络_后缀数组

    外星联络 bzoj-2251 2010-BeiJing Wc 题目大意:题目链接. 注释:略. 想法: 这咋做啊????一看数据范围才$3\cdot 10^3$. 建立后缀数组. 所以我们将所有后缀排 ...

  3. codevs——1013 求先序排列

    1013 求先序排列 2001年NOIP全国联赛普及组  时间限制: 1 s  空间限制: 128000 KB  题目等级 : 黄金 Gold 题解       题目描述 Description 给出 ...

  4. JVM(一):源文件的转变

    JVM(一):源文件的转变 本文讲述一个.java源文件是如何经过javac编译器的一系列操作变为.class文件的. 编译 说到编译,大家都能想到是编译器经过一系列方法将源代码转变为目标机器代码,但 ...

  5. Linux下tmp文件夹的文件自动删除的问题(转)

    场景: 近日发现有一台机器tmp文件夹下放置的文件无辜丢失,而且排查发现是自动丢失,并且,只是删除10天之前的文件. 本来以为是哪位写了一个自动执行脚本, find了一下10天前的文件删除了. 结果, ...

  6. Redis基于Java的客户端SDK收集

    如果要找这类的SDK,第一反应应该直奔官网,找一下看下有什么推荐.先找最权威的回答,找不到再尝试民间方案. 就Redis来说,官方已经提供了一个列表包括市面上绝大多数语言的SDK,可以参考以下网址看J ...

  7. Servlet发送邮件

    以下内容引用自http://wiki.jikexueyuan.com/project/servlet/sending-email.html: 使用Servlet发送一封电子邮件是非常简单的,但是开始之 ...

  8. 最简单 NDK 样例

    以下在 Ubuntu下 编译一个 c 语言 hello world 并在 android 手机或模拟器上执行 进入程序位置 cd  ~/pnp5/jni 有三个文件 main.c Android.mk ...

  9. 谈论javascript闭包

    闭包看似很简单,其实牵扯了很多东西,例如:上下文作用域(事件处理程序).内存占用.局部以及全局变量.回调函数以及编程模式等 首先我们谈论一个问题,为什么需要闭包? 1.var全局定义(全局污染)- 指 ...

  10. Application Warm-up Module IIS7.5 也有Warm Up功能,让ASP.NET 第一次Request不变慢

    Application Warm-up Module: 應用程式的暖機代理人 http://www.microsoft.com/taiwan/technet/iis/expand/Applicatio ...