GTK构件之杂项构件

描述

1.标签 lable

  标签(Labels)是GTK中最常用的构件,实际上它很简单。因为没有相关联的X窗口,标签不能引发信号。如果需要获取或引发信号,可以将它放在一个事件盒中,或放在按钮构件里面。

1.1 相关接口函数

/*创建标签*/
GtkWidget*gtk_label_new (const gchar *str);
GtkWidget*gtk_label_new_with_mnemonic (const gchar *str)
/*设置标签对齐方式*/
void gtk_label_set_justify (GtkLabel *label,GtkJustification jtype);
  jtype参数:
    GTK_JUSTIFY_LEFT,//左对齐
    GTK_JUSTIFY_RIGHT,//右对齐
    GTK_JUSTIFY_CENTER,//居中
GTK_JUSTIFY_FILL//充满
/*获取标签内容*/
const gchar *gtk_label_get_label (GtkLabel *label)
/*设置标签自动换行*/
void gtk_label_set_line_wrap (GtkLabel *label,gboolean wrap)
/*添加下划线*/
voidgtk_label_set_pattern (GtkLabel *label,const gchar *pattern)

1.2 标签示例

构件
#include 
gint window_event_callback(GtkWidget *widget,gpointer data)
{
	g_print("close windown");
	return FALSE;
}
void Window_close_callback(GtkObject *obj)
{
	gtk_main_quit();
}
int main(int argc,char **argv)
{

	GtkWidget *window;
	GtkWidget *hbox,*vbox;
	GtkWidget *frame;
	GtkWidget *label;
	gtk_init(&argc,&argv);
	window=gtk_window_new(GTK_WINDOW_TOPLEVEL);
	gtk_window_set_title(GTK_WINDOW(window),"GTK");
	gtk_container_set_border_width(GTK_CONTAINER(window),2);
	g_signal_connect(G_OBJECT(window),"delete_event",G_CALLBACK(window_event_callback),NULL);
	g_signal_connect_swapped(G_OBJECT(window),"destroy",G_CALLBACK(Window_close_callback),NULL);

	/*创建盒*/
	hbox=gtk_hbox_new(FALSE,2);
	vbox=gtk_vbox_new(FALSE,2);
	/*将横向盒添加到窗口*/
	gtk_container_add(GTK_CONTAINER(window),hbox);
	/*将纵向盒放入横向盒中*/
	gtk_box_pack_start(GTK_BOX(hbox),vbox,FALSE,FALSE,2);
	/*创建一个框架构件*/
	frame=gtk_frame_new("标签1");
	label=gtk_label_new("这是一个框构件!");
   /*添加下划线*/
	gtk_label_set_pattern (GTK_LABEL(label),"_______________________");
	/*将标签放入框架构件中*/
	gtk_container_add(GTK_CONTAINER(frame),label);
	/*将框架构件放入组装盒中*/
	gtk_box_pack_start(GTK_BOX(vbox),frame,FALSE,FALSE,0);

	/*创建框架构件*/
	frame=gtk_frame_new("名言");
	label=gtk_label_new("与其临渊羡鱼,n    不如退而结网!");
	gtk_container_add(GTK_CONTAINER(frame),label);
	gtk_box_pack_start(GTK_BOX(vbox),frame,FALSE,FALSE,0);

	/*创建框架构件*/
	frame=gtk_frame_new("左对齐");
	label=gtk_label_new("种一棵树最好的时间时十年前,n"
						"其次是现在。");
	gtk_label_set_justify(GTK_LABEL(label),GTK_JUSTIFY_LEFT);
	gtk_container_add(GTK_CONTAINER(frame),label);
	gtk_box_pack_start(GTK_BOX(vbox),frame,FALSE,FALSE,0);

	/*创建框架构件*/
	frame=gtk_frame_new("右对齐");
	label=gtk_label_new("GTK 标签n右对齐示例");
	gtk_container_add(GTK_CONTAINER(frame),label);
	gtk_label_set_justify(GTK_LABEL(label),GTK_JUSTIFY_RIGHT);
	gtk_box_pack_start(GTK_BOX(vbox),frame,FALSE,FALSE,0);
	
	vbox=gtk_vbox_new(FALSE,5);
	gtk_box_pack_start(GTK_BOX(hbox),vbox,FALSE,FALSE,5);
	frame=gtk_frame_new("将进酒");
	/*设置轮廓样式*/
	gtk_frame_set_shadow_type(GTK_FRAME(frame),GTK_SHADOW_ETCHED_OUT);
	label=gtk_label_new("李白n"

		"君不见黄河之水天上来,奔流到海不复回。n"
		"君不见高堂明镜悲白发,朝如青丝暮成雪。n"
		"人生得意须尽欢,莫使金樽空对月。n"
		"天生我材必有用,千金散尽还复来。n"
		"天生我材必有用,千金散尽还复来。n"
		"烹羊宰牛且为乐,会须一饮三百杯。n"
		"岑夫子,丹丘生,将进酒,杯莫停。n"
		"与君歌一曲,请君为我倾耳听。n"
		"钟鼓馔玉不足贵,但愿长醉不愿醒。n"
		"古来圣贤皆寂寞,惟有饮者留其名。n"
		"陈王昔时宴平乐,斗酒十千恣欢谑。n"
		"主人何为言少钱,径须沽取对君酌。n"
		"五花马,千金裘,呼儿将出换美酒,与尔同销万古愁。");
	gtk_label_set_justify(GTK_LABEL(label),GTK_JUSTIFY_CENTER);
	gtk_container_add(GTK_CONTAINER(frame),label);
	gtk_box_pack_start(GTK_BOX(vbox),frame,FALSE,FALSE,0);
	
	gtk_widget_show_all(window);
	gtk_main();
	return 0;
}

 

2.箭头Arrows

  箭头构件(Arrow widget)画一个箭头,面向几种不同的方向,并有几种不同的风格。在许多应用程序中,常用于创建带箭头的按钮。和标签构件一样,它不能引发信号。

/*创建箭头*/
GtkWidget*gtk_arrow_new (GtkArrowType arrow_type,GtkShadowType shadow_type);
形参:
     arrow_type  --箭头方向
         GTK_ARROW_UP,  --上
         GTK_ARROW_DOWN,  --下
         GTK_ARROW_LEFT,  --左
         GTK_ARROW_RIGHT, --右
         GTK_ARROW_NONE  --无箭头
         shadow_type  --箭头风格
/*设置箭头属性*/
gtk_arrow_set(GtkArrow * arrow, GtkArrowType arrow_type, GtkShadowType shadow_type)

2.1 箭头示例

构件

  创建箭头,将箭头放入按钮中,再创建一个组装盒,将按钮放到盒中。

#include 
gint window_event_callback(GtkWidget *widget,gpointer data)
{
	g_print("close windown");
	return FALSE;
}
void Window_close_callback(GtkObject *obj)
{
	gtk_main_quit();
}
/*创建一个带箭头的按钮
GtkArrowType --箭头方向
GtkShadowType --箭头轮廓
返回值:返回按钮对象

*/
GtkWidget *gtk_Arrow_button_create(GtkArrowType arrow_type,GtkShadowType shadow_type)
{
	GtkWidget *button;
	GtkWidget *arrow;
	/*1.创建按钮*/
	button=gtk_button_new();
	/*创建箭头*/
	arrow=gtk_arrow_new(arrow_type, shadow_type);
	/*将箭头放入按钮中*/
	gtk_container_add(GTK_CONTAINER(button),arrow);
	gtk_widget_show(arrow);
	gtk_widget_show(arrow);
	return button;
}
int main(int argc,char **argv)
{

	GtkWidget *window;
	GtkWidget *hbox;
	GtkWidget *button;
	gtk_init(&argc,&argv);
	window=gtk_window_new(GTK_WINDOW_TOPLEVEL);
	gtk_window_set_title(GTK_WINDOW(window),"GTK");
	gtk_container_set_border_width(GTK_CONTAINER(window),2);
	g_signal_connect(G_OBJECT(window),"delete_event",G_CALLBACK(window_event_callback),NULL);
	g_signal_connect_swapped(G_OBJECT(window),"destroy",G_CALLBACK(Window_close_callback),NULL);
	/*1.创建横向盒*/
	hbox=gtk_hbox_new(FALSE,0);
	//将盒添加到窗口
	gtk_container_add(GTK_CONTAINER(window),hbox);
	/*2.创建带箭头按钮*/
	button=gtk_Arrow_button_create(GTK_ARROW_UP,GTK_SHADOW_IN);
	gtk_box_pack_start(GTK_BOX(hbox),button, TRUE,FALSE,5);

	button=gtk_Arrow_button_create(GTK_ARROW_DOWN,GTK_SHADOW_OUT);
	gtk_box_pack_start(GTK_BOX(hbox),button, TRUE,FALSE,5);

	button=gtk_Arrow_button_create(GTK_ARROW_LEFT,GTK_SHADOW_ETCHED_IN);
	gtk_box_pack_start(GTK_BOX(hbox),button, TRUE,FALSE,5);

	button=gtk_Arrow_button_create(GTK_ARROW_RIGHT,GTK_SHADOW_ETCHED_OUT);
	gtk_box_pack_start(GTK_BOX(hbox),button, TRUE,FALSE,5);
	
	gtk_widget_show_all(window);
	gtk_main();
	return 0;
}

3 工具提示对象The Tooltips Object

    工具提示对象(Tooltips)就是当 鼠标指针移到按钮或其它构件上并停留几秒时,弹出的文本串。

      不接收事件的构件(没有自己的X窗口的构件)不能和工具提示对象一起工作。可以使用 gtk_tooltips_new()函数创建工具提示对象。因为GtkTooltips对象可以重复使用,一般在应用程序中仅需要调用这个函数一次。

3.1 相关接口函数

/*创建工具提示对象,创建成功默认已经激活*/
GtkTooltips *gtk_tooltips_new( void );
/*设置提示信息*/
void gtk_tooltips_set_tip( GtkTooltips *tooltips,GtkWidget *widget,const 
gchar *tip_text,const gchar *tip_private );
形参:tooltips  --创建的工具提示对象
      widget  --要设置提示信息的构件
      tip_text  --提示的内容
      tip_private --标识符的文本串,当用GtkTipsQuery实现上下文敏感的帮助时要引用该标识符。目前,你可以把它设置为 NULL. 
/*激活已经禁用的工具提示对象*/
void gtk_tooltips_enable( GtkTooltips *tooltips);
/*禁用已经激活的工具提示对象*/
void gtk_tooltips_disable( GtkTooltips *tooltips ); 
/*改变工具提示的延迟时间*/
void gtk_tooltips_set_delay(GtkTooltips *tooltips,guint delay);

3.2 示例

#include 
gint window_event_callback(GtkWidget *widget,gpointer data)
{
	g_print("close windown");
	return FALSE;
}
void Window_close_callback(GtkObject *obj)
{
	gtk_main_quit();
}

int main(int argc,char **argv)
{
	GtkWidget *window;
	GtkWidget *button;
	GtkTooltips *tiptool;
	gtk_init(&argc,&argv);
	window=gtk_window_new(GTK_WINDOW_TOPLEVEL);
	gtk_window_set_title(GTK_WINDOW(window),"GTK");
	gtk_container_set_border_width(GTK_CONTAINER(window),2);
	g_signal_connect(G_OBJECT(window),"delete_event",G_CALLBACK(window_event_callback),NULL);
	g_signal_connect_swapped(G_OBJECT(window),"destroy",G_CALLBACK(Window_close_callback),NULL);
	/*1.创建按钮*/
	button=gtk_button_new_from_stock(GTK_STOCK_QUIT);
	gtk_container_add(GTK_CONTAINER(window),button);
	/*创建提示对象工具*/
	tiptool=gtk_tooltips_new();
	/*添加提示信息到按钮*/
	gtk_tooltips_set_tip(tiptool,button,"退出按钮",NULL);

	gtk_widget_show_all(window);
	gtk_main();
	return 0;
}

 

 

  审核编辑:汤梓红

 

打开APP阅读更多精彩内容
声明:本文内容及配图由入驻作者撰写或者入驻合作网站授权转载。文章观点仅代表作者本人,不代表电子发烧友网立场。文章及其配图仅供工程师学习之用,如有内容侵权或者其他违规问题,请联系本站处理。 举报投诉

全部0条评论

快来发表一下你的评论吧 !

×
20
完善资料,
赚取积分