首页 > 其他分享 >GTK入门学习:布局练习之计算器

GTK入门学习:布局练习之计算器

时间:2022-09-28 18:09:13浏览次数:54  
标签:GTK 入门 button gtk new GtkWidget 计算器 table


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

GTK入门学习:布局练习之计算器_一步一步学习GTK+


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

GTK入门学习:布局练习之计算器_布局_02


这里我们用到行编辑控件( 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[] )
{
gtk_init (&argc, &argv); // 初始化

// 窗口的操作
GtkWidget *window = gtk_window_new (GTK_WINDOW_TOPLEVEL); // 创建窗口
gtk_widget_set_size_request(window, 270, 320);

// 表格的操作
GtkWidget *table = gtk_table_new(5, 4, TRUE); // 表格布局,5行4列

// 行编辑的操作
GtkWidget *entry = gtk_entry_new(); // 行编辑的创建
gtk_entry_set_text(GTK_ENTRY(entry), "2+2=4"); // 给行编辑设置内容
gtk_editable_set_editable(GTK_EDITABLE(entry), FALSE);// 设置行编辑不允许编辑,只做显示用

// 按钮的操作
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_multiply = gtk_button_new_with_label("*"); // 乘
GtkWidget *button_divide = gtk_button_new_with_label("/"); // 除
GtkWidget *button_equal = gtk_button_new_with_label("="); // 等于
GtkWidget *button_detele = gtk_button_new_with_label("c"); // 退格

// 布局操作
gtk_container_add(GTK_CONTAINER(window), 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_multiply, 3, 4, 2, 3);
gtk_table_attach_defaults(GTK_TABLE(table), button_divide, 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_detele, 3, 4, 1, 2);


gtk_widget_show_all(window); // 显示所有控件

gtk_main(); //进入事件循环

return 0;
}



标签:GTK,入门,button,gtk,new,GtkWidget,计算器,table
From: https://blog.51cto.com/u_3002289/5720678

相关文章

  • 为什么要学习GTK?
    开发图形界面的工具包有很多,windows有WPF、WinForm,Android有自带的SDK,IOS也有自己的一套,跨平台的话可以用Qt,结果发现,GTK真没它的用武之地。实际上,GTK的地位真是这样的,那我......
  • GTK入门学习:glade的介绍
    上面的学习中,我们是通过纯C语言代码来进行GTK编程的,这也是我们学习GTK的最佳方法,因为这样我们可以清楚地知道整个流程,大体流程如下:1)创建主窗口,根据需要设置窗口的相应属性2)......
  • GTK进阶学习:GTK实现截图功能( 可以指定截图范围 )
    按按钮截图,图片保存在当前路径为“save.png”:#include<gtk/gtk.h>#include<cairo.h>/********************************************************功能:指定窗口区域截图,需......
  • GTK常用控件之图片控件( GtkImage )
    图片控件和标签的作用很类似,都是作为显示用的,只是图片控件显示的内容是图片。图片控件的创建:GtkWidget*gtk_image_new_from_file(constgchar*filename);filename:图片的......
  • protobuf入门教程(二):消息类型
    操作流程1)在.proto文件中定义消息格式2)使用protobuf编译器生成C++类3)使用C++API来读写消息C++编程指导:​​https://developers.google.com/protocol-buffers/docs/c......
  • protobuf入门教程(四):repeated限定修饰符
    限定修饰符说明repeated代表可重复,我们可以理解为数组:syntax="proto3";//指定版本信息,不指定会报错messagePerson//message为关键字,作用为定义一种消息类型{string......
  • protobuf入门教程(六):导入定义(import)
    消息格式info.proto文件内容如下:syntax="proto3";//指定版本信息,不指定会报错packageinfopack;//package声明符messageinfo//message为关键字,作用为定义一种消息类型{......
  • day04 --> (JDBC基本概念、快速入门、对JDBC中各个接口和类详解)
    一、JDBC:1、概念:JavaDataBaseConnectivity -->Java数据库连接,Java语言操作数据库本质:官方(sun公司)定义的一套操作所有关系型数据库的规则,即接口。各个数据库厂商去实......
  • Python 基础入门(六)
    Python基础入门(六)目录Python基础入门(六)一、while循环补充说明1、死循环2、嵌套及全局标志位二、流程控制之for循环for循环特点不同取值类型结果三、range方法一、while......
  • pyqt入门
    第一次接触pyqt是在20年刚毕业的时候,时隔两年,恰逢闲暇,正好回过头来对这个模块的知识进行一个整理,不会做系统化的整理,我打算可能会围绕之前做过的小工具对其涉及到的控......