GTK构件之杂项构件

时间:2022-10-19 13:57:09

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 标签示例

GTK构件之杂项构件

#include <gtk/gtk.h>
gint window_event_callback(GtkWidget *widget,gpointer data)
{
g_print("close window\n");
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 箭头示例

GTK构件之杂项构件

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

#include <gtk/gtk.h>
gint window_event_callback(GtkWidget *widget,gpointer data)
{
g_print("close window\n");
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 <gtk/gtk.h>
gint window_event_callback(GtkWidget *widget,gpointer data)
{
g_print("close window\n");
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;
}