GTK+图形化应用程序开发学习笔记(六)—按钮(2)

 

二、触发按钮

       触发按钮(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”);就可创建如图所示的按钮

了。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值