GTK入门学习:布局练习之计算器
接下来,我们做一个布局练习。例如以下图:
我们用表格布局实现,表格布局參考坐标例如以下:
这里我们用到行编辑控件( 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;
}
执行结果:
GTK入门学习:布局练习之计算器的更多相关文章
- GTK入门学习:布局容器之固定布局
前面我们学习的水平.垂直和表格布局容器,控件会跟着容器大小的变化进行自己主动适应.而固定布局容器里的控件则不会跟着变化( 则固定不变 ). 固定布局的创建: GtkWidget *gtk_fixed_ ...
- GTK入门学习:布局容器之水平布局
假设我们希望窗体里多放加入几个控件,直接加入是不成功的.由于窗体仅仅能容纳一个控件的容器. 这时候.我们须要借助布局容器,我们先把布局容器加入到窗体里.然后再把所须要加入的控件放在布局容器里. 布局容 ...
- GTK入门学习:glade的使用
搭建好环境后,在终端敲 glade 就可以启动glade工具. glade的总体框图: 经常使用控件选择区:列举了经常使用的控件,经常使用的有三类:顶层(主窗体等).容器(各种布局容器等).控制和显示 ...
- 微信小程序入门学习-- 简易Demo:计算器
简单学习下微信小程序 官网 简易教程 · 小程序 https://mp.weixin.qq.com/debug/wxadoc/dev/ 需要通过开发者工具,来完成小程序创建和代码编辑. 下载安装,运行 ...
- PyQt4入门学习笔记(三)
# PyQt4入门学习笔记(三) PyQt4内的布局 布局方式是我们控制我们的GUI页面内各个控件的排放位置的.我们可以通过两种基本方式来控制: 1.绝对位置 2.layout类 绝对位置 这种方式要 ...
- 【数据库】7.0 MySQL入门学习(七)——MySQL基本指令:帮助、清除输入、查询等
1.0 help == ? 帮助指令,查询某个指令的解释.用法.说明等.详情参考博文: [数据库]6.0 MySQL入门学习(六)——MySQL启动与停止.官方手册.文档查询 https://www. ...
- Android Camera2 拍照入门学习
原文:Android Camera2 拍照入门学习 学习资料: 肾虚将军android camera2 详解说明 极客学院android.hardware.camera2 使用指南 Android 5 ...
- 第15.18节 PyQt(Python+Qt)入门学习:Model/View架构中视图Item Views父类详解
老猿Python博文目录 老猿Python博客地址 一.概述 在PyQt图形界面中,支持采用Model/View架构实现数据和界面逻辑分离,其中Model用于处理数据存储,View用于界面数据展现,当 ...
- Jetpack Compose学习(5)——从登录页美化开始学习布局组件使用
原文:Jetpack Compose学习(5)--从登录页美化开始学习布局组件使用 | Stars-One的杂货小窝 本篇主要讲解常用的布局,会与原生Android的布局控件进行对比说明,请确保了解A ...
随机推荐
- oracle无参数和带参数的存储过程实例
SQL中调用存储过程语句:call procedure_name(); 注:调用时”()”是不可少的,无论是有参数还是无参数. 定义对数据库存储过程的调用时1.无参数存储过程:{call proced ...
- Spring整合Junit进行单元测试
I. 加入依赖包 Spring Test (如spring-test-2.5.4.jar) JUnit 4 Spring 其他相关包 II.新建Junit Test Case III.读取配置文件 @ ...
- HashSet源码分析 jdk1.6
Set的特点:Set元素无顺序,且元素不可以重复. 1.定义 public class HashSet<E> extends AbstractSet<E> implements ...
- 用Javascript实现图片的缓慢缩放效果
<body> <!--页面布局:一张图片两个按钮--> <div style = "width:400px;margin:0 auto"> &l ...
- BZOJ1227 [SDOI2009]虔诚的墓主人 【树状数组】
题目 小W 是一片新造公墓的管理人.公墓可以看成一块N×M 的矩形,矩形的每个格点,要么种着一棵常青树,要么是一块还没有归属的墓地.当地的居民都是非常虔诚的基督徒,他们愿意提前为自己找一块合适墓地.为 ...
- 【CCF】最优灌溉 最小生成树
[AC] #include<iostream> #include<cstdio> #include<string> #include<cstring> ...
- Java面试题之ArrayList和LinkedList的区别
先看下类图: 相同点: 都实现了List接口和Collection: 不同点: 1.ArrayList是基于数组实现的:LinkedList是基于链表实现的: 2.ArrayList随机查询速度快:L ...
- BeanFactory到WebApplicationContext的结构 以及bean和spring容器的关系
BeanFactory: Ioc 容器 ApplicationContext: Spring容器 WebApplicationContext需要ServletContext实例,也就是说它必须在拥有W ...
- STL学习笔记(七) 程序中使用STL
条款43:算法调用优先于手写循环 class Widget { public: bool test(); }; vector<Widget> vec; 算法调用: for_each(vec ...
- SHUoj 字符串进制转换
字符串进制转换 发布时间: 2017年7月9日 18:17 最后更新: 2017年7月9日 21:17 时间限制: 1000ms 内存限制: 128M 描述 Claire Redfield ...