一、常用构件函数
最常用的构件是按钮构件、录入字段构件、列表框构件和复合框构件。所有建立按钮的函数返回指向GtkWidget的指针。GtkWidget指针能够调用对构件进行操作的通用函数。函数gtk_widget_show是通用函数的例子。
由于建立的构件是通用的构件,需要将它转换为正确的类型以适合调用更为专用的函数。如:建立按钮函数返回GtkWidget指针,但是专用的按钮子程序要求GtkButton指针。所有在调用专用的按钮函数以前,需要使用GTK_BUTTON宏将通用的GtK_Widget指针转换为GtKButton指针。
二、按钮
按钮时最简单的构件,因为它们的最常用功能是允许用户点击它们。“点击”事件是一次按下按钮和释放按钮的组合。通常点击按钮导致某些操作的完成,如保存文件或结束对话等。
按钮由容器派生而来,所有它们共享容器的许多特性。一个重要的特性是容纳其它构件的能力。按钮构件的正文实际是放在按钮构件内的标号构件。
建立按钮可以带标号或不带标号。函数gtk_button_new_with_label建立带标号的按钮。函数gtk_button_new建立不带子构件的按钮。函数返回指向GtkWidget的指针,可以使用GTK_BUTTON宏将它转换为GtkButton。
1.
名称::
|
gtk_button_new
gtk_button_new_with_label
|
功能:
|
创建一个不带标号的按钮(gtk_button_new)
创建一个带标号的按钮 (gtk_button_new_with_label)
|
头文件:
|
#include <gtk/gtk.h>
|
函数原形:
|
GtkWidget *gtk_button_new(void);
GtkWidget *gtk_button_new_with_label(const gchar *label);
|
参数:
|
label按钮正文
|
返回值:
|
新的按钮
|
按钮构件能够发送若干种信号。按钮信号有:
pressed 按下按钮
released释放按钮
clichéd点击按钮,这是“按下”和“释放”操作的组合
enter鼠标移动到按钮上
leave鼠标离开按钮
事件可以使用户的操作引起的,也可以用下面的函数模拟事件的发生。但不经常使用模拟信号发生的函数。
pressed gtk_button_pressed(button)
released gtk_button_released(button)
clichéd gtk_button_clicked(button)
enter gtk_button_enter(button)
leave gtk_button_leave(button)
下面的短信息建立带按钮的窗口。当产生信号时,在控制台上显示每一种按钮信号。
#include <gtk/gtk.h>
void button_event(GtkWidget *,gpointer *);
int main(int argc,char *argv[ ])
{
GtkWidget *window;
GtkWidget *button;
gtk_init(&argc,&argv); /*初始化*/
window=gtk_window_new(GTK_WINDOW_TOPLEVEL); /*创建窗体*/
gtk_signal_connect(GTK_OBJECT(window),”delete_event”,G_CALLBACK(gtk_main_quit),NULL); /*登记窗体delete_event信号的回调函数*/
button=gtk_button_new_with_label(“Button”); /*创建带标号的按钮*/
gtk_signal_connect(GTK_OBJECT(button),”pressed”,GTK_SIGNAL_FUNC(button_event),”pressed”); /*登记按钮pressed信号的回调函数*/
gtk_signal_connect(GTK_OBJECT(button),”released”,GTK_SIGNAL_FUNC(button_event),”released”); /*登记按钮released信号的回调函数*/
gtk_signal_connect(GTK_OBJECT(button),”clicked”,GTK_SIGNAL_FUNC(button_event),”clicked”); /*登记按钮clicked信号的回调函数*/
gtk_signal_connect(GTK_OBJECT(button),”enter”,GTK_SIGNAL_FUNC(button_event),”enter”); /*登记按钮enter信号的回调函数*/
gtk_signal_connect(GTK_OBJECT(button),”leave”,GTK_SIGNAL_FUNC(button_event),”leave”); /*登记按钮leave信号的回调函数*/
gtk_container_add(GTK_CONTAINER(window),button); /*把按钮加入窗体*/
gtk_widget_show(button); /*显示按钮*/
gtk_widget_show(window); /*显示窗体*/
gtk_main();
return 0;
}
void button_event(GtkWidget *widget,gpointer *data) /*回调函数*/
{
g_print(“Button event:%s/n”,data);
}
|
我们编译上面的程序:
$gcc –o button1 button1.c `pkg-config –cflags –libs gtk+-2.0
$./button1
下面是显示页面:
当用户点击Button然后移开,终端会显示如下信息:
Button event: enter
Button event: pressed
Button event: clicked
Button event: released
Button event: leave
当然这只是一个演示,在实际应用中也许你需要通过点击一个按钮来调用一个段具有一定功能的函数。
二、触发按钮
触发按钮(toggle button,GtkToggleButton)是GtkButton派生而来。它的外观类似GtkButton,但运行方式稍有不同。触发按钮与一种状态结合在一起。它可以按下和弹回。触发按钮的外观反映它的状态。在开始,触发按钮看上去和普通按钮一样。如果按下按钮,它就停留在下面。触发按钮需要再按一次才能弹回来。下面是触发按钮的两种状态:
弹起状态按下状态
可以使用gtk_toggle_button_new_with_labal函数建立带标号的触发按钮,或者使用gtk_toggle_button_new函数建立不带标号的触发按钮。因为触发按钮是由普通按钮派生而来的,所以所有可以用在普通按钮上的事件和函数都可以用在触发按钮上。并且触发按钮增加了一个信号”toggled(触发)”,当按钮的状态改变时它发送”触发”信号。
2.
名称::
|
gtk_toggle_button_new
gtk_toggle_button_new_with_label
|
功能:
|
创建一个不带标号的触发按钮(gtk_toggle_button_new)
创建一个带标号的触发按钮 (gtk_toggle_button_new_with_label)
|
头文件:
|
#include <gtk/gtk.h>
|
函数原形:
|
GtkWidget *gtk_toggle_button_new(void);
GtkWidget *gtk_toggle_button_new_with_labal(const gchar *label);
|
参数:
|
label触发按钮正文
|
返回值:
|
新的触发按钮
|
我们对button1程序稍加改动,并且添加了对“toggled”信号的处理。
/*button2.c*/
#include <gtk/gtk.h>
void button_event(GtkWidget *,gpointer *);
int main(int argc,char *argv[ ])
{
GtkWidget *window;
GtkWidget *button;
gtk_init(&argc,&argv); /*初始化*/
window=gtk_window_new(GTK_WINDOW_TOPLEVEL); /*创建窗体*/
gtk_signal_connect(GTK_OBJECT(window),”delete_event”,G_CALLBACK(gtk_main_quit),NULL); /*登记窗体delete_event信号的回调函数*/
button=gtk_toggle_button_new_with_label(“Button”); /*创建带标号的触发按钮*/
gtk_signal_connect(GTK_OBJECT(button),”pressed”,GTK_SIGNAL_FUNC(button_event),”pressed”); /*登记按钮pressed信号的回调函数*/
gtk_signal_connect(GTK_OBJECT(button),”released”,GTK_SIGNAL_FUNC(button_event),”released”); /*登记按钮released信号的回调函数*/
gtk_signal_connect(GTK_OBJECT(button),”clicked”,GTK_SIGNAL_FUNC(button_event),”clicked”); /*登记按钮clicked信号的回调函数*/
gtk_signal_connect(GTK_OBJECT(button),”enter”,GTK_SIGNAL_FUNC(button_event),”enter”); /*登记按钮enter信号的回调函数*/
gtk_signal_connect(GTK_OBJECT(button),”leave”,GTK_SIGNAL_FUNC(button_event),”leave”); /*登记按钮leave信号的回调函数*/
gtk_signal_connect(GTK_OBJECT(button),”toggle”,GTK_SIGNAL_FUNC(button_event),”toggle”); /*登记按钮toggle信号的回调函数*/
gtk_container_add(GTK_CONTAINER(window),button); /*把按钮加入窗体*/
gtk_widget_show(button); /*显示触发按钮*/
gtk_widget_show(window); /*显示窗体*/
gtk_main();
return 0;
}
void button_event(GtkWidget *widget,gpointer *data) /*回调函数*/
{
g_print(“Button event:%s/n”,data);
}
|
当用户点击Button然后移开,终端会显示如下信息:
Button event: enter
Button event: pressed
Button event: toggled
Button event: clicked
Button event: released
Button event: leave
可以看到与上面的区别是增加了Button event: toggled信息。这是由“触发”信号产生的。
三、检查按钮
检查按钮就是我们通常来说的复选框。检查按钮(check button,GtkCheckButton)由触发按钮(GtkToggleButton)派生而来。GtkCheckButton的表现类似GtkToggleButton。两者的主要差别是按钮在屏幕上的显示方式不同。两种构件完成同样的功能,选择哪一种按钮纯粹是用户爱好。下面是选择按钮的两种状态。
下面是创建检查按钮的函数:
3.
名称::
|
gtk_check_button_new
gtk_check_button_new_with_label
|
功能:
|
创建一个不带标号的检查按钮(gtk_check_button_new)
创建一个带标号的检查按钮 (gtk_check_button_new_with_label)
|
头文件:
|
#include <gtk/gtk.h>
|
函数原形:
|
GtkWidget *gtk_check_button_new(void);
GtkWidget *gtk_check_button_new_with_labal(const gchar *label);
|
参数:
|
label检查按钮正文
|
返回值:
|
新的检查按钮
|
只要把button2.c中的button=gtk_toggle_button_new_with_label(“Check Button”);
替换为:button=gtk_check_button_new_with_label(“Button”);就可创建如图所示的按钮
了。
四、选择按钮
选择就是我们通常来说的单选框。从外观来看,选择按钮(GtkRaddioButton)很像检查按钮。因为选择按钮是从检查按钮派生而来的。选择按钮和检查按钮的区别不大,对选择按钮来说,任何时候在一组按钮只可以选择一个按钮,点击一个按钮就释放前面选择的按钮,使点击的按钮成为被选择的按钮。
可以用gtk_radio_hutton_new_with_label函数建立带标号的GtkRadioButton,或者用gtk_radio_button_new函数建立不带标号的GtkRadioButton。建立GtkRadioButton只完成了工作的一半。因为选择按钮必须和组联系起来,使得任何时候只能选择一个按钮。
4.
名称::
|
gtk_radio_button_new
gtk_radio_button_new_with_label
|
功能:
|
创建一个不带标号的选择按钮(gtk_radio_button_new)
创建一个带标号的选择按钮 (gtk_radio_button_new_with_label)
|
头文件:
|
#include <gtk/gtk.h>
|
函数原形:
|
GtkWidget *gtk_radio_button_new(GSList *group);
GtkWidget *gtk_radio_button_new_with_labal(GSList *group,const gchar *label);
|
参数:
|
group
所属组
label选择按钮正文
|
返回值:
|
新的选择按钮
|
在创建选择按钮的时候需要指定选择按钮的组,在使用组之前应该先把组指向NULL。否则会出现错误。
5.
名称::
|
gtk_radio_button_group
|
功能:
|
把选择按钮添加到组中
|
头文件:
|
#include <gtk/gtk.h>
|
函数原形:
|
GSList *gtk_group_button_group(GtkWidget *radio);
|
参数:
|
radio选择按钮
|
返回值:
|
组名
|
每添加一个选择按钮后都得调用一次gtk_radio_button_group函数取得组,然后继续添加按钮。如果不这样做将导致不可预期的结果。
下面我们就创建2个按钮,并把它们加入到一个组中:
/*button4.c*/
#include <gtk/gtk.h>
int main(int argc,char *argv[ ])
{
GtkWidget *window;
GtkWidget *button;
GtkWidget *box;
GSList *group=NULL;
gtk_init_chrck(&argc,&argv); /*初始化GTK+工具库*/
window=gtk_window_new(GTK_WINDOW_TOPLEVEL); /*创建窗体*/
gtk_signal_connect(GTK_OBJECT(window),”delete_event”,G_CALLBACK(gtk_main_quit),NULL); /*登记窗体delete_event信号*/
box=gtk_vbox_new(FALSE,0);/*创建组合框*/
button=gtk_radio_button_new_with_label(group,”Radio Button1”);/*创建按钮*/
group=gtk_radio_button_group(GTK_RADIO_BUTTON(button));/*把按钮加到组中*/
gtk_box_pack_start(GTK_BOX(box),button,FALSE,FALSE,0);/*把按钮加入组合框*/
gtk_widget_show(button);/*显示按钮*/
button=gtk_radio_button_new_with_label(group,”Radio Button2”);
group=gtk_radio_button_group(GTK_RADIO_BUTTON(button));
gtk_box_pack_start(GTK_BOX(box),button,FALSE,FALSE,0);
gtk_widget_show(button);
gtk_container_add(GTK_CONTAINER(window),box);/*把组合框加入窗体*/
gtk_widget_show(box);/*显示组合框*/
gtk_widget_show(window);/*显示窗体*/
gtk_main();
return 0;
}
|
我们编译上面的程序:
$gcc –o button4 button4.c `pkg-config –cflags –libs gtk+-2.0
$./button4
下图是运行之后的页面:
分享到:
相关推荐
这个“GTK+图形化应用程序开发学习笔记”包含了关于使用GTK+进行GUI编程的详细教程和实践案例。 GTK+的核心特性包括跨平台支持、丰富的组件库、强大的主题引擎以及对多种编程语言的绑定,如C、C++、Python、Vala等...
《Linux应用程序开发指南:使用GTK+ GNOME库》是面向Linux平台的应用程序开发人员的一本重要参考书籍,主要讲解如何利用GTK+和GNOME库来构建高效、用户友好的图形界面应用。这篇读书笔记将深入探讨其中的核心概念和...
### GTK+2.0 教程 — Linux图形编程 ...通过以上内容的学习,开发者不仅可以掌握GTK+2.0的基本使用方法,还能深入了解其高级特性,从而能够利用GTK+2.0开发出功能强大且用户体验良好的Linux应用程序。
GTK,全称 GIMP Toolkit,是一个用于开发图形用户界面的开源工具包,广泛应用于Linux、Unix...通过阅读GTK的官方文档、参考手册和示例代码,初学者可以逐步掌握GTK的使用技巧,从而开发出功能丰富的图形界面应用程序。
"Gtk资料大全,包含gtk各方面资料"这个压缩包,从其标题和描述来看,应该包含了全面的GTK学习资源,包括文档、教程和可能的代码示例,旨在帮助开发者深入理解和掌握GTK,以便开发基于GTK的图形界面应用程序。...
### Gtk+2.0教程(Linux下的界面) #### 简介 Gtk+(GIMP Toolkit)是一...通过本教程的学习,相信读者不仅能够熟练掌握Gtk+2.0的基本用法,还能深入理解其核心机制,并有能力开发出功能完善且美观的Linux桌面应用。
### GTK+2.0 教程知识点概览 #### 一、引言 GTK+(GIMP Toolkit)是一个跨平台的工具包,...通过上述内容的学习,读者可以系统地掌握 GTK+2.0 的核心知识和技术要点,并能够运用这些知识来开发高质量的 GUI 应用程序。
GTK,全称GIMP Toolkit,是一个用于创建图形用户界面(GUI)的开源工具包,广泛应用于Linux、Unix和Windows等操作系统。GTK最初是为图像处理软件GIMP开发的,但随着时间的发展,它已经成为一个功能强大的跨平台GUI库...
本教程将深入剖析GTK+2.0的核心概念和实用技巧,尤其侧重于通过C语言接口进行GUI应用程序的开发,为读者提供一个由浅入深的学习路径。 #### 开始旅程:Hello World in GTK - **基础知识**:首先,我们将从最简单的...
GTK 是一套用于创建图形用户界面的跨平台工具包,广泛应用于 Linux 系统中的应用程序开发。它提供了丰富的控件和功能,支持多种操作系统和编译器,并且具有良好的可移植性。 **文件管理器功能设计** - **基本文件...
GTK 2.0 教程是面向那些想要深入了解和学习GTK图形用户界面库的开发者们的重要资源。GTK,全称GIMP Toolkit,最初是为图像处理软件GIMP设计的,但随着时间的发展,它已经成为一个广泛使用的跨平台GUI库,支持多种...
在本实验中,我们学习了 /proc 文件系统的基础知识,并使用 GTK 图形库来读取 /proc 文件系统,并将系统状态以图形化的形式显示出来。本实验可以帮助我们更好地理解 Linux 系统的工作原理,并提高我们的编程能力。