没事儿找事儿————gtk学习(用盒状容器排列控件)

        盒状容器只能容纳一行或者一列控件,可以向盒状容器中再添加盒状容器。还可以用格状容器控件(GtkTable)。格状容器是一种能容纳多行多列且简单易用的容器,它提供了坐标方式表示控件所要摆放的空间的方式。

#include<gtk/gtk.h>
int main(int argc,char**argv)
{
	GtkWidget* window;
	GtkWidget* table;
	GtkWidget* button;
	GtkWidget* frame;
	gtk_init(&argc,&argv);

	window = gtk_window_new(GTK_WINDOW_TOPLEVEL);
	gtk_window_set_title(GTK_WINDOW(window),"格状容器");
	gtk_window_set_default_size(GTK_WINDOW(window),400,300);
	g_signal_connect(G_OBJECT(window),"destroy",G_CALLBACK(gtk_main_quit),NULL);
	gtk_container_set_border_width(GTK_CONTAINER(window),40);

	frame = gtk_frame_new("格状容器排列控件");
	gtk_container_add(GTK_CONTAINER(window),frame);

	table = gtk_table_new(4,4,FALSE);
	gtk_container_set_border_width(GTK_CONTAINER(table),10);
	gtk_table_set_row_spacings(GTK_TABLE(table),5);
	gtk_table_set_col_spacings(GTK_TABLE(table),5);
	gtk_container_add(GTK_CONTAINER(frame),table);

	button = gtk_button_new_with_label("1");
	gtk_table_attach(GTK_TABLE(table),button,0,1,0,1,GTK_FILL,GTK_FILL,0,0);
	
	button = gtk_button_new_with_label("2");
	gtk_table_attach(GTK_TABLE(table),button,1,3,1,3,GTK_FILL,GTK_FILL,0,0);
	
	button = gtk_button_new_with_label("3");
	gtk_table_attach_defaults(GTK_TABLE(table),button,0,1,1,3);
	
	button = gtk_button_new_with_label("4");
	gtk_table_attach_defaults(GTK_TABLE(table),button,1,3,0,1);
	
	button = gtk_button_new_with_label("5");
	gtk_table_attach_defaults(GTK_TABLE(table),button,0,4,3,4);
	
	button = gtk_button_new_with_label("6");
	gtk_table_attach_defaults(GTK_TABLE(table),button,3,4,0,3);
	
	gtk_widget_show_all(window);
	gtk_main();
	return 0;
}


       框架控件(Gtk_Frame)和窗口一样是一种只能容纳一个控件的对象,但它不能像窗口那样直接显示出来,必须把它放到窗口中才能显示出来。
       table = gtk_table_new(4,4,FALSE);创建格状容器,为4行4列,不容许均匀摆放子控件。
      在格状容器中排列控件使用gtk_table_attach和gtk_table_attach_defaults,它们的功能是向格状容器的指定区域中添加控件。
      函数gtk_table_attach有10个参数,前两个参数分别是格状容器和要放入到格状容器中的控件指针;接下来的4个参数是控件在格状容器中的位置坐标;最后4个参数是排放控件的属性和间隔距离。其中第7个参数和第8个参数类型为GtkAttachOptions,有3中分别是GTK_EXPAND(可扩展的);GTK_SHRINK(可缩小的);GTK_FILL(可添充的)
    函数gtk_table_set_row_spacings和gtk_table_set_col_spacings来设定格状容器中子控件的行间隔和列间隔。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值