easyui grid 添加按钮_用GTK+来创建一个带界面的C语言程序5—用网格容器排列按钮...

这篇博客介绍了如何在C语言中使用GTK+库创建带有按钮布局的程序,特别是利用格状容器(GtkGrid)来实现多行多列控件的排列。通过示例代码展示了如何创建框架控件、添加网格容器,以及在网格中添加和定位按钮,强调了gtk_grid_attach()函数在控制按钮位置和大小中的应用。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

在这一节中将学习如何使用框架控件和能容纳多行和多列控件的网格容器以及如何灵活在网格容器中排放控件。

盒状容器只能容纳一行或者一列控件,如何容纳多行多列控件呢?向盒状容器中再添加盒状容器。这当然是创建多行多列控件布局的一个好方法。还有一个方法就是使用网格容器(GtkGrid)控件。

网格容器是一种能容纳多行多列控件且简单易用的容器,它提供了坐标方式表示控件所要摆放的位置,使按行列排列多个控件变得更加简单。

/*用格状容器排列按钮GtkGrid.c*/

#include

int main(int argc, char * argv[])

{

GtkWidget * window;

GtkWidget * grid;

GtkWidget * button;

GtkWidget * frame;

gtk_init(&argc, &argv);

window = gtk_window_new(GTK_WINDOW_TOPLEVEL);

g_signal_connect(G_OBJECT(window), "destroy", G_CALLBACK(gtk_main_quit), NULL);

gtk_window_set_title(GTK_WINDOW(window), "格状容器");

gtk_window_set_default_size(GTK_WINDOW(window), 200, 300);

gtk_container_set_border_width(GTK_CONTAINER(window),20);

frame = gtk_frame_new("请注意下列按钮排列");

gtk_container_add(GTK_CONTAINER(window), frame);

grid = gtk_grid_new();

gtk_container_add(GTK_CONTAINER(frame), grid);

button = gtk_button_new_with_label("按钮一");

//添加按钮一到位置(0,0)处,并设置高,宽均为一个单元

gtk_grid_attach(GTK_GRID(grid), button, 0, 0, 1, 1);

//添加按钮一到位置(1,0)处,并设置高,宽均为一个单元

button = gtk_button_new_with_label("按钮二");

gtk_grid_attach(GTK_GRID(grid), button, 1, 0, 1, 1);

//添加按钮一到位置(0,1)处,并设置高为一个单元,宽为两个单元

button = gtk_button_new_with_label("按钮三");

gtk_grid_attach(GTK_GRID(grid), button, 2, 0, 1, 2);

button = gtk_button_new_with_label("按钮四");

gtk_grid_attach(GTK_GRID(grid), button, 0, 1, 2, 1);

gtk_widget_show_all(window);

gtk_main();

return FALSE;

}

运行结果:

2d6f74c7af9f6eecf8c35945635c0040.png

网格容器布局

代码分析:

1.创建框架控件

框架控件(GtkFrame)和窗口一样是一种只能容纳一个控件的对象,但它不能像窗口那样直接显示出来,这一点又和盒状容器一样,必须把它放到窗口中才能显示出来。框架(Frames)可以用于盒子中封装一个或一组控件,框架本身还可以有一个标签。标签的位置和盒子的风格可以灵活改变。框架控件在GTK+编程中主要起到美化、修饰窗口、规范控件的范围和提示作用。可以用gtk_frame_new函数创建框架,参数是显示在框架上的标题文字。

GtkWidget * gtk_frame_new(const gchar * label);

标签的缺省值放在框架的左上角。传递NULL值作为label参数时,框架不显示标签。标签文本可以用下面的函数改变。

设置框架的标签:

void gtk_frame_set_label( GtkFrame * frame, const gchar * label );

设置框架标签的位置:

void gtk_frame_set_label_align( GtkFrame *frame,

gfloat xalign,

gfloat yalign );

xalign和yalign参数取值范围介于0.0和1.0之间。xalign指定标签在框架构件上部水平线上的位置。yalign目前还没有被使用。xalign的缺省值是0.0,它将标签放在框架构件的最左端。

设置显示框架的轮廓:

void gtk_frame_set_shadow_type( GtkFrame *frame,

GtkShadowType type);

type参数可以取以下值之一:

GTK_SHADOW_NONE

GTK_SHADOW_IN

GTK_SHADOW_OUT

GTK_SHADOW_ETCHED_IN (缺省值)

GTK_SHADOW_ETCHED_OUT

2.创建网格容器

最关键的就是创建网格容器了,它用gtk_grid_new()函数来创建一个网格布局容器,使用gtk_grid_attach()函数将控件添加到网格容器中。

void gtk_grid_attach(grid, child, int left,int top, int width, int height):将子控件child附加到grid中,后面四个参数依次代表第几行,第几列,横向跨度,纵向跨度。

在本示例演示了网格容器的一般用法,当设计的程序界面控件比较多时,就可以考虑用格状容器来排放控件了。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值