Linux 图形化编程GTK3.0 快速入门之布局

ops/2024/9/25 8:49:49/
htmledit_views">

GTK3.0 布局之水平布局

核心语法:

水平布局容器:

水平布局容器的创建:
GtkWidget *gtk_hbox_new( gboolean homogeneous,  gint spacing );

homogeneous:容器内控件是否大小一致( gboolean 取值为TRUE 或 FALSE )
spacing:控件之间的间隔( 以像素点为单位 ),gint相当于 C语言的int
返回值:水平布局控件指针


容器添加添加控件:
void gtk_container_add(GtkContainer *container, GtkWidget *widget);

container:容纳控件的容器
widget:要添加的控件


显示容器上所有控件
void gtk_widget_show_all(GtkWidget *widget);
widget:需要显示的控件

功能源码:

#include<stdio.h>
#include<gtk-3.0/gtk/gtk.h>/*** 基于初始化图形库* 添加相关功能: 水平布局 * * 细节要求:为水平布局添加二个Button 按钮* * * */static void print_hello(GtkWidget *widget, gpointer data) {g_print("Hello World\n");
}int main(int argc, char *argv[]) {GtkWidget *window;GtkWidget *button;gtk_init(&argc, &argv); // gtk 初始化window = gtk_window_new(GTK_WINDOW_TOPLEVEL); // gtk 窗口实例化g_signal_connect(window, "destroy", G_CALLBACK(gtk_main_quit), NULL); //window 窗口绑定销毁事件,并触发gtk_main_quite 函数// gkt 水平布局组件初始化化GtkWidget *hbox = gtk_hbox_new(TRUE, 10);// 声明button1 组件GtkWidget *button1 = gtk_button_new_with_label("按钮一"); //  gtk Button 实例化g_signal_connect(button1, "clicked", G_CALLBACK(print_hello), NULL); // gtk Button 绑定cliend 事件并触发绑定函数// 声明button2 组件GtkWidget *button2 = gtk_button_new_with_label("按钮二"); //  gtk Button 实例化g_signal_connect(button2, "clicked", G_CALLBACK(print_hello), NULL); // gtk Button 绑定cliend 事件并触发绑定函数// 水平布局添加Button  组件gtk_container_add(GTK_CONTAINER(hbox), button1);gtk_container_add(GTK_CONTAINER(hbox), button2);// 把水平布局容器添加到窗口gtk_container_add(GTK_CONTAINER(window), hbox); gtk_widget_show_all(window); // 显示windows 窗口包含的所有gtk 组件gtk_main(); //gtk 主事件循环开启return 0;
}

效果截图:

GTK3.0 布局之垂直布局

核心语法:

垂直布局容器的创建:
GtkWidget *gtk_vbox_new( gboolean homogeneous,  gint spacing );

功能源码:

#include<stdio.h>
#include<gtk-3.0/gtk/gtk.h>/*** 基于初始化图形库* 添加相关功能: 垂直布局 * * 细节要求:为垂直布局添加二个Button 按钮* * * */static void print_hello(GtkWidget *widget, gpointer data) {g_print("Hello World\n");
}int main(int argc, char *argv[]) {GtkWidget *window;GtkWidget *button;gtk_init(&argc, &argv); // gtk 初始化window = gtk_window_new(GTK_WINDOW_TOPLEVEL); // gtk 窗口实例化g_signal_connect(window, "destroy", G_CALLBACK(gtk_main_quit), NULL); //window 窗口绑定销毁事件,并触发gtk_main_quite 函数// gkt 垂直布局组件初始化化GtkWidget *vbox = gtk_vbox_new(TRUE, 10);// 声明button1 组件GtkWidget *button1 = gtk_button_new_with_label("按钮一"); //  gtk Button 实例化g_signal_connect(button1, "clicked", G_CALLBACK(print_hello), NULL); // gtk Button 绑定cliend 事件并触发绑定函数// 声明button2 组件GtkWidget *button2 = gtk_button_new_with_label("按钮二"); //  gtk Button 实例化g_signal_connect(button2, "clicked", G_CALLBACK(print_hello), NULL); // gtk Button 绑定cliend 事件并触发绑定函数// 水平布局添加Button  组件gtk_container_add(GTK_CONTAINER(vbox), button1);gtk_container_add(GTK_CONTAINER(vbox), button2);// 把水平布局容器添加到窗口gtk_container_add(GTK_CONTAINER(window), vbox); gtk_widget_show_all(window); // 显示windows 窗口包含的所有gtk 组件gtk_main(); //gtk 主事件循环开启return 0;
}

效果截图:

GTK3.0 布局之表格布局

核心语法:

表格布局容器的创建:
GtkWidget *gtk_table_new( guint rows, guint columns, gboolean homogeneous );

rows: 行数
coumns: 列数
homogeneous:容器内表格的大小是否相等
返回值:表格布局容器指针

布局容器添加控件:
void gtk_table_attach_defaults(GtkTable *table, GtkWidget *widget,guint left_attach,guint right_attach,guint top_attach,guint bottom_attach );

table:  容纳控件的容器 
widget: 要添加的控件

功能源码:

#include<stdio.h>
#include<gtk-3.0/gtk/gtk.h>/*** 基于初始化图形库* 添加相关功能: 表格布局* * 细节要求:为表格布局第一行添加二个Button 按钮*         为表格布局第一行添加一个Button 按钮* * * */static void print_hello(GtkWidget *widget, gpointer data) {g_print("Hello World\n");
}int main(int argc, char *argv[]) {GtkWidget *window;GtkWidget *button;gtk_init(&argc, &argv); // gtk 初始化window = gtk_window_new(GTK_WINDOW_TOPLEVEL); // gtk 窗口实例化g_signal_connect(window, "destroy", G_CALLBACK(gtk_main_quit), NULL); //window 窗口绑定销毁事件,并触发gtk_main_quite 函数// gkt 表格布局组件初始化化GtkWidget *table = gtk_table_new(2, 2, TRUE); // 声明button1 组件GtkWidget *button1 = gtk_button_new_with_label("按钮一"); //  gtk Button 实例化g_signal_connect(button1, "clicked", G_CALLBACK(print_hello), NULL); // gtk Button 绑定cliend 事件并触发绑定函数// 声明button2 组件GtkWidget *button2 = gtk_button_new_with_label("按钮二"); //  gtk Button 实例化g_signal_connect(button2, "clicked", G_CALLBACK(print_hello), NULL); // gtk Button 绑定cliend 事件并触发绑定函数// 声明button3 组件GtkWidget *button3 = gtk_button_new_with_label("按钮一"); //  gtk Button 实例化g_signal_connect(button3, "clicked", G_CALLBACK(print_hello), NULL); // gtk Button 绑定cliend 事件并触发绑定函数// 表格布局添加Button  组件gtk_table_attach_defaults(GTK_TABLE(table), button1, 0, 1, 0, 1);gtk_table_attach_defaults(GTK_TABLE(table), button2, 1, 2, 0, 1);gtk_table_attach_defaults(GTK_TABLE(table), button3, 0, 2, 1, 2);// 把表格布局容器添加到窗口gtk_container_add(GTK_CONTAINER(window), table); gtk_widget_show_all(window); // 显示windows 窗口包含的所有gtk 组件gtk_main(); //gtk 主事件循环开启return 0;
}

效果截图:

GTK3.0 布局之固定布局

核心语法:

固定布局的创建:
GtkWidget *gtk_fixed_new(void);
返回值:固定布局容器指针


固定布局容器添加控件:
void gtk_fixed_put( GtkFixed *fixed,GtkWidget *widget,gint x,gint y );

fixed:容纳控件的容器
widget:要添加的控件

x, y:控件摆放位置的起点坐标,如下图:

设置控件的大小( 宽和高 ):
void gtk_widget_set_size_request(GtkWidget *widget,gint width,gint height );

widget:需要设置的控件
width:宽度
height:高度


移动固定布局里控件的位置:
void gtk_fixed_move(   GtkFixed *fixed,GtkWidget *widget,gint x,gint y);

fixed:固定布局容器
widget:需要移动的控件
x, y: 移动的位置

功能源码:

#include<stdio.h>
#include<gtk-3.0/gtk/gtk.h>/*** 基于初始化图形库* 添加相关功能: 固定布局* * 细节要求:为固定布局左上角添加二个Button 按钮, 距离窗口(5, 10)*         为固定布局右下角添加一个Button 按钮, 距离窗口(200, 200)* * * */static void print_hello(GtkWidget *widget, gpointer data) {g_print("Hello World\n");
}int main(int argc, char *argv[]) {GtkWidget *window;gtk_init(&argc, &argv); // gtk 初始化window = gtk_window_new(GTK_WINDOW_TOPLEVEL); // gtk 窗口实例化g_signal_connect(window, "destroy", G_CALLBACK(gtk_main_quit), NULL); //window 窗口绑定销毁事件,并触发gtk_main_quite 函数// gkt 固定布局组件初始化化GtkWidget *fix = gtk_fixed_new(); // 声明button1 组件GtkWidget *button1 = gtk_button_new_with_label("左上角"); //  gtk Button 实例化g_signal_connect(button1, "clicked", G_CALLBACK(print_hello), NULL); // gtk Button 绑定cliend 事件并触发绑定函数// 声明button2 组件GtkWidget *button2 = gtk_button_new_with_label("右下角"); //  gtk Button 实例化g_signal_connect(button2, "clicked", G_CALLBACK(print_hello), NULL); // gtk Button 绑定cliend 事件并触发绑定函数// 固定布局添加Button  组件gtk_fixed_put(GTK_FIXED(fix), button1, 5, 10);gtk_fixed_put(GTK_FIXED(fix), button2, 200, 200);// 把表格布局容器添加到窗口gtk_container_add(GTK_CONTAINER(window), fix); gtk_widget_show_all(window); // 显示windows 窗口包含的所有gtk 组件gtk_main(); //gtk 主事件循环开启return 0;
}

效果截图:

GTK3.0 布局实战之计算器

功能源码:

#include<stdio.h>
#include<gtk-3.0/gtk/gtk.h>/*** 基于初始化图形库* 添加相关功能: 通过表格布局,实现计算器布局* * 细节要求: 基于windows 11 系统计算器实现布局.*         * * * */static void print_hello(GtkWidget *widget, gpointer data) {g_print("Hello World\n");
}int main(int argc, char *argv[])
{GtkWidget *window;gtk_init(&argc, &argv); // gtk 初始化window = gtk_window_new(GTK_WINDOW_TOPLEVEL); // gtk 窗口实例化g_signal_connect(window, "destroy", G_CALLBACK(gtk_main_quit), NULL); //window 窗口绑定销毁事件,并触发gtk_main_quite 函数// gkt 表格布局组件初始化化GtkWidget *table = gtk_table_new(2, 2, TRUE); ; // 行编辑的操作GtkWidget *entry = gtk_entry_new();		// 行编辑的创建gtk_entry_set_text(GTK_ENTRY(entry), NULL);	// 给行编辑设置内容gtk_editable_set_editable(GTK_EDITABLE(entry), FALSE);// 设置行编辑不允许编辑,只做显示用// 声明button1 组件GtkWidget *button1 = gtk_button_new_with_label("1"); //  gtk Button 实例化g_signal_connect(button1, "clicked", G_CALLBACK(print_hello), NULL); // gtk Button 绑定cliend 事件并触发绑定函数// 声明button2 组件GtkWidget *button2 = gtk_button_new_with_label("2"); //  gtk Button 实例化g_signal_connect(button2, "clicked", G_CALLBACK(print_hello), NULL); // gtk Button 绑定cliend 事件并触发绑定函数// 声明button3 组件GtkWidget *button3 = gtk_button_new_with_label("3"); //  gtk Button 实例化g_signal_connect(button3, "clicked", G_CALLBACK(print_hello), NULL); // gtk Button 绑定cliend 事件并触发绑定函数// 声明button4 组件GtkWidget *button4 = gtk_button_new_with_label("+"); //  gtk Button 实例化g_signal_connect(button4, "clicked", G_CALLBACK(print_hello), NULL); // gtk Button 绑定cliend 事件并触发绑定函数// 声明button5 组件GtkWidget *button5 = gtk_button_new_with_label("4"); //  gtk Button 实例化g_signal_connect(button5, "clicked", G_CALLBACK(print_hello), NULL); // gtk Button 绑定cliend 事件并触发绑定函数// 声明button6 组件GtkWidget *button6 = gtk_button_new_with_label("5"); //  gtk Button 实例化g_signal_connect(button6, "clicked", G_CALLBACK(print_hello), NULL); // gtk Button 绑定cliend 事件并触发绑定函数// 声明button7 组件GtkWidget *button7 = gtk_button_new_with_label("6"); //  gtk Button 实例化g_signal_connect(button7, "clicked", G_CALLBACK(print_hello), NULL); // gtk Button 绑定cliend 事件并触发绑定函数// 声明button8 组件GtkWidget *button8 = gtk_button_new_with_label("-"); //  gtk Button 实例化g_signal_connect(button8, "clicked", G_CALLBACK(print_hello), NULL); // gtk Button 绑定cliend 事件并触发绑定函数// 声明button9 组件GtkWidget *button9 = gtk_button_new_with_label("7"); //  gtk Button 实例化g_signal_connect(button9, "clicked", G_CALLBACK(print_hello), NULL); // gtk Button 绑定cliend 事件并触发绑定函数// 声明button10 组件GtkWidget *button10 = gtk_button_new_with_label("8"); //  gtk Button 实例化g_signal_connect(button10, "clicked", G_CALLBACK(print_hello), NULL); // gtk Button 绑定cliend 事件并触发绑定函数// 声明button11 组件GtkWidget *button11 = gtk_button_new_with_label("9"); //  gtk Button 实例化g_signal_connect(button11, "clicked", G_CALLBACK(print_hello), NULL); // gtk Button 绑定cliend 事件并触发绑定函数// 声明button12 组件GtkWidget *button12 = gtk_button_new_with_label("*"); //  gtk Button 实例化g_signal_connect(button12, "clicked", G_CALLBACK(print_hello), NULL); // gtk Button 绑定cliend 事件并触发绑定函数// 声明button13 组件GtkWidget *button13 = gtk_button_new_with_label("0"); //  gtk Button 实例化g_signal_connect(button13, "clicked", G_CALLBACK(print_hello), NULL); // gtk Button 绑定cliend 事件并触发绑定函数// 声明button14 组件GtkWidget *button14 = gtk_button_new_with_label("C"); //  gtk Button 实例化g_signal_connect(button14, "clicked", G_CALLBACK(print_hello), NULL); // gtk Button 绑定cliend 事件并触发绑定函数// 声明button15 组件GtkWidget *button15 = gtk_button_new_with_label("="); //  gtk Button 实例化g_signal_connect(button15, "clicked", G_CALLBACK(print_hello), NULL); // gtk Button 绑定cliend 事件并触发绑定函数// 声明button12 组件GtkWidget *button16 = gtk_button_new_with_label("/"); //  gtk Button 实例化g_signal_connect(button16, "clicked", G_CALLBACK(print_hello), NULL); // gtk Button 绑定cliend 事件并触发绑定函数// 表格布局添加Button  组件gtk_table_attach_defaults(GTK_TABLE(table), entry,  0, 4, 0, 1);// 表格布局添加Button  组件gtk_table_attach_defaults(GTK_TABLE(table), button1, 0, 1, 1, 2);gtk_table_attach_defaults(GTK_TABLE(table), button2, 1, 2, 1, 2);gtk_table_attach_defaults(GTK_TABLE(table), button3, 2, 3, 1, 2);gtk_table_attach_defaults(GTK_TABLE(table), button4, 3, 4, 1, 2);gtk_table_attach_defaults(GTK_TABLE(table), button5, 0, 1, 2, 3);gtk_table_attach_defaults(GTK_TABLE(table), button6, 1, 2, 2, 3);gtk_table_attach_defaults(GTK_TABLE(table), button7, 2, 3, 2, 3);gtk_table_attach_defaults(GTK_TABLE(table), button8, 3, 4, 2, 3);gtk_table_attach_defaults(GTK_TABLE(table), button9,  0, 1, 3, 4);gtk_table_attach_defaults(GTK_TABLE(table), button10, 1, 2, 3, 4);gtk_table_attach_defaults(GTK_TABLE(table), button11, 2, 3, 3, 4);gtk_table_attach_defaults(GTK_TABLE(table), button12, 3, 4, 3, 4);gtk_table_attach_defaults(GTK_TABLE(table), button13,  0, 1, 4, 5);gtk_table_attach_defaults(GTK_TABLE(table), button14, 1, 2, 4, 5);gtk_table_attach_defaults(GTK_TABLE(table), button15, 2, 3, 4, 5);gtk_table_attach_defaults(GTK_TABLE(table), button16, 3, 4, 4, 5);// 把表格布局容器添加到窗口gtk_container_add(GTK_CONTAINER(window), table); gtk_widget_show_all(window); // 显示windows 窗口包含的所有gtk 组件gtk_main(); //gtk 主事件循环开启return 0;
}

效果截图:

GTK 官方文档和Demo 安装和查看 

1、安装GTK3.0 官方文档,请执行如下指令

sudo apt-get install devhelp


http://www.ppmy.cn/ops/50569.html

相关文章

【机器学习】支持向量机(个人笔记)

文章目录 SVM 分类器的误差函数分类误差函数距离误差函数C 参数 非线性边界的 SVM 分类器&#xff08;内核方法&#xff09;多项式内核径向基函数&#xff08;RBF&#xff09;内核 源代码文件请点击此处&#xff01; SVM 分类器的误差函数 SVM 使用两条平行线&#xff0c;使用…

MacOS之Rosetta技术的引入

提示&#xff1a;宝子们&#xff0c;希望文章对你们有所帮助&#xff0c; 请一键三连支持博主下吧&#xff5e; 文章目录 前言一、Rosetta 是什么&#xff1f;二、关于安装Rosetta三、关于Rosetta的问题分享总结 前言 博主的个人开发环境和配置说明&#xff1a; MacOS Montere…

Eclipse 工作空间:深入解析与高效使用

Eclipse 工作空间:深入解析与高效使用 Eclipse 是一款广受欢迎的集成开发环境(IDE),它为各种编程语言提供了强大的开发工具。在 Eclipse 中,工作空间(Workspace)是一个核心概念,它代表了一个项目的集合,这些项目共享相同的配置和设置。本文将深入探讨 Eclipse 工作空…

项目二 OpenStack快速入门

任务一 熟悉OpenStack图形界面操作 1.1 Horizon项目 •各OpenStack服务的图形界面都是由Horizon提供的。 •Horizon提供基于Web的模块化用户界面。 •Horizon为云管理员提供一个整体的视图。 •Horizon为终端用户提供一个自主服务的门户。 •Horizon由云管理员进行管理…

Postman接口测试工具详解

前言 在现代软件开发中&#xff0c;API&#xff08;应用程序接口&#xff09;已成为各类应用程序互相通信和集成的核心。随着API的广泛使用&#xff0c;确保其稳定性、可靠性和性能的重要性日益增加。在这个背景下&#xff0c;API测试工具成为开发者和测试人员的重要武器。Pos…

C 语言连接MySQL 数据库

前提条件 本机安装MySQL 8 数据库 整体步骤 第一步&#xff1a;开启Windows 子系统安装Ubuntu 22.04.4&#xff0c;安装MySQL 数据库第三方库执行 如下命令&#xff1a; sudo aptitude install libmysqlclient-dev wz2012LAPTOP-8R0KHL88:/mnt/e/vsCode/cpro$ sudo aptit…

电商API接口详述:涵盖订单、库存等多功能接口介绍

电商商家自研管理系统&#xff0c;线下ERP系统或WMS系统想要接入电商平台订单打单发货&#xff0c;通过点三电商API可以一键对接多个电商平台&#xff0c;帮助商家、ERP/WMS服务商快速开发电商模块&#xff0c;实现电商业务管理功能&#xff0c;那么点三电商API接口有哪些可用接…

Docker 入门篇(十)-- XXL-Job 任务调度安装

一、简介 XXL-Job 是一个轻量级、分布式的任务调度平台&#xff0c;用于处理定时任务和手动触发任务。它具有高可用性、高可靠性和易于扩展等特点&#xff0c;适用于需要分布式任务调度的各种场景。 XXL-Job 相关博客&#xff1a; Springboot 开发之任务调度框架&#xff08;二…