Your Ad Here
首页 | 编程语言 | 网站建设 | 游戏天堂 | 冲浪宝典 | 网络安全 | 操作系统 | 软件时空 | 硬件指南 | 病毒相关 | IT 认证
软讯网络 > 操作系统 > Linux > 长篇连载:gtk/glade程序开发
【标  题】:长篇连载:gtk/glade程序开发
【关键字】:gtk/glade
【来  源】:http://blog.chinaunix.net/article.php?articleId=50087&blogId=6198

长篇连载:gtk/glade程序开发

Your Ad Here http://www.linuxforum.net/forum/showflat.php?Cat=&Board=kylix&Number=566950&page=3&view=collapsed&sb=5&o=0&fpart=all&vc=1

准备用一个月的时间 对gtk编程做一个介绍,希望大家支持。

在windows下做开发,把做成的程序转移到Linux.(源代码不做任何修改,只要重新编译、连接一次即可)

需要的开发工具:
Dev-cpp 4.9.9.2 (进行C程序的编译、连接)
Glade (进行图形界面设计)
Gtk开发组件

只需两个软件包:
devcpp-4.9.9.2_setup
gtk-win32-devel-2.6.8-rc1(包含glade和gtk开发组件)

下载网址:
www.bloodshed.net
gladewin32.sourceforge.net,

请按上面的版本下载,其它版本有bug。

下载软件并安装(先装devcpp-4.9.9.2_setup,再安装gtk-win32-devel-2.6.8-rc1,等出现dev-cpp选项时,选中它),

接下来,来运行我们的第一个程序。




cuigf
(stranger)
05-07-08 21:55
[精华] Re: 长篇连载:gtk/glade程序开发 新 [re: cuigf] 


本教程要使用图片,怎么办?

文章选项: 打印

passworld
(enthusiast)
05-07-08 22:44
[精华] Re: 长篇连载:gtk/glade程序开发 新 [re: cuigf] 

这里可以附件图片,而且可以用 [ img ] 这种UBB代码直接显示图片,看有关UBB代码的帮助。




--------------------
http://bugbox.blogspot.com

文章选项: 打印

cuigf
(stranger)
05-07-09 21:00
[精华] Re: 长篇连载:gtk/glade程序开发 新 [re: passworld] 

我想在页面中直接显示图片。

文章选项: 打印

passworld
(enthusiast)
05-07-09 22:37
[精华] Re: 长篇连载:gtk/glade程序开发 新 [re: cuigf] 

看UBB代码说明







--------------------
http://bugbox.blogspot.com

文章选项: 打印

cuigf
(stranger)
05-07-10 18:32
[精华] Re: 长篇连载:gtk/glade程序开发 新 [re: passworld] 


UBB代码是下面这样的:

[图片]url[/图片] = 显示某网址所指定的图片

显示某网址所指定的图片 ,问题是怎样把我的电脑中的图片,在linuxforum的页面中显示出来。

如果把文档当作附件传上去效果就不好了。

文章选项: 打印

cuigf
(stranger)
05-07-11 13:54
[精华] 长篇连载:gtk/glade程序开发, 运行你的第一个程序 *DELETED* *DELETED* 新 [re: cuigf] 

文章被删除,删除者: gogoliu

文章选项: 打印

gogoliu版主
(veteran)
05-07-11 20:57
[精华] Re: 长篇连载:gtk/glade程序开发, 运行你的第一个程序 *DELETED* 新 [re: cuigf] 

文章被删除,删除者: gogoliu


--------------------
良好的沟通能力 和 积极的行动 是成功的钥匙。

文章选项: 打印

cuigf
(stranger)
05-07-11 22:22
附加档案
[精华] Re: 长篇连载:gtk/glade程序开发, 运行你的第一个程序 新 [re: gogoliu] 

《运行你的第一个程序》这部分内容在附件中,请下载后用中文版的openoffice的write打开。

文章选项: 打印

gogoliu版主
(veteran)
05-07-12 16:13
[精华] Re: 长篇连载:gtk/glade程序开发, 运行你的第一个程序 新 [re: cuigf] 

问题依旧。
档案大小限制在 200000 bytes
档案类型:.txt,.zip,.gz,.bz2,.pdf,.gif,.jpg,.png,.rar


--------------------
良好的沟通能力 和 积极的行动 是成功的钥匙。

文章选项: 打印

cuigf
(stranger)
05-07-13 10:14
附加档案
[精华] 运行你的第一个程序 新 [re: gogoliu] 

《运行你的第一个程序》这部分内容在附件中,请下载后用中文版的openoffice的write打开。

请版主把不相关的内容删除。

文章选项: 打印

gogoliu版主
(veteran)
05-07-13 17:13
[精华] Re: 运行你的第一个程序 新 [re: cuigf] 

因为是一路re下来的,所以删除了帖子还在。
你可以考虑一下开一个新主题。


--------------------
良好的沟通能力 和 积极的行动 是成功的钥匙。

文章选项: 打印

cuigf
(stranger)
05-07-14 17:33
[精华] 读懂Glade生成的代码(一) 新 [re: gogoliu] 

第二节 读懂Glade生成的代码(一)

在glade的源文件目录src下有7个代码文件,它们分别是:

1> callbacks.c Glade生成的大部分空的回调函数所在的文件,你自己往里面添加代码
2> callbacks.h (头文件)Glade生成的回调函数的定义文件
4> interface.c Glade生成的界面源代码文件
5> interface.h (头文件)Glade生成的界面的定义文件
6> main.c 主函数
7> support.c 支持文件
8> support.h (头文件)支持文件

在galde生成的devcpp目录里有2个文件
1> config.h Glade 生成的配置文件
2>gtk1.dev Glade 生成的devcpp工程文件(就是你保存时启的那个名子)。

不要被这么多的文件吓着,需要你自己编写代码的文件只有三个(其它文件不要动),它们是:
main.c (一般只需做少量的修改)
callbacks.h (一般只需做少量的修改,甚至不作修改)
callbacks.c (函数的具体实现部分,你需要在这里编写一定量的代码)

其中callbacks.c是你编写代码的主文件。

下面我们来简单了解一下glade生成的界面文件interface.c

GtkWidget*
create_window1 (void)
{
GtkWidget *window1; /*定义一个窗口构件*/
GtkWidget *fixed1; /*定义一个固定容器构件,用于放置其它构件*/
GtkWidget *label1; /*定义一个标签构件*/

window1 = gtk_window_new (GTK_WINDOW_TOPLEVEL); /*新建一个窗口*/
gtk_window_set_title (GTK_WINDOW (window1), _("window1")); /*设置窗口的标题*/
gtk_window_set_default_size (GTK_WINDOW (window1), 400, 300); /*设置窗口的默认大小为400,300*/

fixed1 = gtk_fixed_new (); /*新建一个固定容器*/
gtk_widget_show (fixed1); /*显示固定容器*/
gtk_container_add (GTK_CONTAINER (window1), fixed1); /*添加固定容器到窗口*/

label1 = gtk_label_new (_("642076050073GTK724406754")); /*新建一个标签*/
gtk_widget_show (label1); /*显示标签*/
gtk_fixed_put (GTK_FIXED (fixed1), label1, 120, 72); /*把标签添加到固定容器中*/
gtk_widget_set_size_request (label1, 136, 40); /*设置标签的大小*/

/* Store pointers to all widgets, for use by lookup_widget(). */
GLADE_HOOKUP_OBJECT_NO_REF (window1, window1, "window1");
GLADE_HOOKUP_OBJECT (window1, fixed1, "fixed1");
GLADE_HOOKUP_OBJECT (window1, label1, "label1");

return window1;
}

文章选项: 打印

cuigf
(stranger)
05-07-16 11:47
[精华] 看懂Glade生成的代码(二) 新 [re: cuigf] 

(这部分内容,能理解多少,理解多少,看不懂也不要紧。)
文件:main.c

只作部分解释,以后你水平高了,慢慢看吧!
以下代码节选自main.c

int main (int argc, char *argv[])
{
GtkWidget *window1; /*定义window1构件*/

gchar *pixmap_dir;
#ifdef G_OS_WIN32
package_prefix = g_win32_get_package_installation_directory (NULL, NULL);
package_data_dir = g_build_filename (package_prefix, "share", NULL);
package_locale_dir = g_build_filename (package_prefix, "share", "locale", NULL);
#endif

#ifdef ENABLE_NLS
bindtextdomain (GETTEXT_PACKAGE, package_locale_dir);
bind_textdomain_codeset (GETTEXT_PACKAGE, "UTF-8");
textdomain (GETTEXT_PACKAGE);
#endif

gtk_set_locale (); /*通过调用这个函数才可显示中文*/
gtk_init (&argc, &argv); /*GTK初始化*/

pixmap_dir = g_build_filename (package_data_dir, PACKAGE, "pixmaps", NULL);
add_pixmap_directory (pixmap_dir);
g_free (pixmap_dir);

/*
* The following code was added by Glade to create one of each component
* (except popup menus), just so that you see something after building
* the project. Delete any components that you don't want shown initially.
*/
window1 = create_window1 (); /*创建window1构件*/
gtk_widget_show (window1); /**显示window1构件/
g_signal_connect ((gpointer) window1, "destroy", G_CALLBACK(gtk_main_quit),
NULL);
/*为window1构件的“destroy”事件,关联函数,
也就是当单击window1的关闭按钮时,关闭window1,同时退出gtk*/
gtk_main (); /*gtk主程序开始执行*/

#ifdef G_OS_WIN32
g_free (package_prefix);
g_free (package_data_dir);
g_free (package_locale_dir);
#endif

return 0;
}

文章选项: 打印

cuigf
(stranger)
05-07-17 12:11
附加档案
[精华] 《第一个交互程序》 新 [re: cuigf] 

《第一个交互程序》在附件中,下载后用中文版的openoffice打开。

文章选项: 打印

cuigf
(stranger)
05-07-18 13:44
[精华] 构件的使用 新 [re: cuigf] 

从这里开始,说一说构件的使用。

文章选项: 打印

cuigf
(stranger)
05-07-18 13:48
[精华] 标签构件 新 [re: cuigf] 

标签构件

标签构件用到的有关函数

创建新标签:
gtk_label_new(“label1”);
gtk_label_new_with_mnemonic(“label1”);
在字符串中放置换行符,可以创建多行标签。

改变标签的文本:
gtk_label_set_text(GTK_LABEL(label1),”label2”);

取得标签的当前文本:
gtk_label_get_text(GTK_LABEL(label1));

设置标签文本的对齐方式:
gtk_label_set_justify(GTK_LABEL(label1),GTK_JUSTIFY_LEFT);

GTK_JUSTIFY_LEFT /*左对齐*/
GTK_JUSTIFY_RIGHT /*右对齐*/
GTK_JUSTIFY_CENTER /*居中对齐*/
GTK_JUSTIFY_FILL /*充满*/

标签内的文本自动换行:
gtk_label_set_line_wrap(GTK_LABEL(label1),TRUE);

注:标签不能引发信号,如需引发信号,需将标签放置在事件盒中。


文章选项: 打印

passworld
(enthusiast)
05-07-18 14:35
[精华] Re: 读懂Glade生成的代码(一) 新 [re: cuigf] 

用 glade 不用 libglade 有入宝山空手而归的感觉,太浪费了。




--------------------
http://bugbox.blogspot.com

文章选项: 打印

cuigf
(stranger)
05-07-19 10:55
[精华] password兄弟: 新 [re: passworld] 

能否全面、概括地介绍一下libglade的情况?

编辑者: cuigf (05-07-19 10:56)

文章选项: 打印

cuigf
(stranger)
05-07-19 11:20
[精华] 文本输入构件(text entry ) 新 [re: cuigf] 

文本输入构件的常用函数:

创建文本输入构件:
GtkWidget *entry1;
entry1 = gtk_entry_new();

改变文本输入构件当前的文本内容:
gtk_entry_set_text(GTK_ENTRY(entry1),"entry2");

取得文本输入构件当前的文本内容:
const gchar *text1;
text1 = gtk_entry_get_text(GTK_ENTRY(entry1));

下一节,通过一个例子来说明文本输入构件(text entry)的使用。

文章选项: 打印

passworld
(enthusiast)
05-07-19 14:54
附加档案
[精华] Re: password兄弟: 新 [re: cuigf] 

Hello world 图


--------------------
http://bugbox.blogspot.com

文章选项: 打印

passworld
(enthusiast)
05-07-19 14:56
[精华] Re: password兄弟: 新 [re: cuigf] 

libglade 就是把 glade 生成的 .glade
文件在程序运行时读入,然后生成相应的控件。这时候我们就不需要让 glade 生成 .c
代码。做到界面和程序码尽量分开。

手册在:

target="_blank">http://developer.gnome.org/doc/API/libglade/libglade.html


只要:

glade_init();
gxml = glade_xml_new ("mygui.glade", "root_win");

就算完了。记住gxml,如果想要具体的控件,可以:

mylabel = glade_xml_get_widget(gxml, "label_hello");

就可以在这个 GtkLabel* mylabel 上操作了。

信号可以用 glade_xml_signal_connect() 连接到函数上,也可以用
glade_xml_signal_autoconnect() 自动连接所有跟信号句柄相同的函数。

以 python 做一个示范,因为 Python 编程比较简单,而且有些便捷函数可用,节省空间:


#!/usr/bin/python

#coding: gb2312

import gtk

from gtk import glade

# 主程序进入点

def main():

global gxml # 全局变量,以后要用

# 加载 .glade 里的对话窗

gxml = glade.XML('test.glade', 'dialog1')

# 我们的信号处理函数

# 这里的 on_www_nnn 是在glade程序里设定的信号句柄

signal_dict = { 'on_dialog1_close': gtk.main_quit,

'on_dialog1_delete_event': gtk.main_quit,

'on_button2_clicked': gtk.main_quit,

'on_button1_clicked': change_label,

}

# 连接到我们的控件树上

gxml.signal_autoconnect(signal_dict)

# 开始跑圈

gtk.main()

#这个函数处理我们发出的改变标签内容按钮的信号

def change_label(widget):

# 从控件树上找到我们的控件

label = gxml.get_widget('label1')

# 判断标签内容,进行设对

if label.get_text() != 'Hello World':

word = 'Hello World'

else:

word = 'What World?'

# 设定标签内容

label.set_text(word)

if __name__ == '__main__':

main()

# vim:ts=8:sw=4:expandtab





--------------------
http://bugbox.blogspot.com

文章选项: 打印

cuigf
(stranger)
05-07-19 16:52
[精华] Re: password兄弟: 新 [re: passworld] 

多谢。

文章选项: 打印

cuigf
(stranger)
05-07-19 16:58
[精华] 文本输入构件(text entry ) (二) 新 [re: cuigf] 

文本输入构件 (二)


一、用glade设计界面
1、新建glade工程

2、放置各种构件:新建window构件(window1),在window1上放置固定容器构件(fixed
positions),在固定容器构件上放置文本输入构件(entry1)。


3、为文本输入构件entry1添加changed信号响应(其它程序设计语言中为事件响应)on_entry1_chan
ged,一定注意在signals选项卡中把object设置为entry1

4、单击Build按钮生成源代码。



二、添加代码

只需在callbacks.c中添加三行代码



Callbacks.c

void on_entry1_changed (GtkEditable *editable,

gpointer user_data)

{

const gchar *text1;

text1 = gtk_entry_get_text(GTK_ENTRY(editable));

printf("text entry : %s\n",text1);

}



三、运行程序


在编译程序之前,在devcpp中设置工程属性为“win32控制台程序”

步骤:1、单击“工程”菜单下的“工程属性”子菜单。

2、在“普通”选项卡中的“类型”中单击“win32控制台程序”。

3、单击“确定”。



编译、运行程序,在文本输入框内随变输入几个英文字母,看看运行效果。


编辑者: cuigf (05-07-19 16:59)

文章选项: 打印

cuigf
(newbie)
05-07-22 20:47
[精华] 组合框(combo box entry)构件 新 [re: cuigf] 




组合框(combo box entry)构件



组合框构件的常用函数:


新建组合框构件:

comboboxentry1 = gtk_combo_box_entry_new_text ();



给组合框构件的下拉列表添加一个新的项目:

gtk_combo_box_append_text (GTK_COMBO_BOX (comboboxentry1), _("one"));



读取组合构件里的文本内容:

text1 = gtk_combo_box_get_active_text(combobox);



例子:


一、用Glade设计界面
步骤:1、新建Glade工程

2、依次放置window构件(大小:400,300)、fixed
positions(固定容器)构件、comboboxentry(组合框)构件。

3、在属性面板中,设置comboboxentry1的Item属性为:one (按回车)、two
(按回车)、three (按回车)、


4、为comboboxentry1构件添加changed信号响应(注意:object后的文本框里填写comboboxentry1)


5、保存项目,生成代码。



二、编写代码


编写代码以前,参照上节内容,设置工程属性为“win32控制台程序”。



callbacks.h


void on_comboboxentry1_changed (GtkComboBox *combobox,

gpointer user_data);



callbacks.c
void on_comboboxentry1_changed (GtkComboBox *combobox,

gpointer user_data)

{

gchar *text1;

text1 = gtk_combo_box_get_active_text(combobox);

printf("The combo text is : %s \n",text1);

}



三、运行程序,观看运行效果


编辑者: cuigf (05-07-22 20:50)

文章选项: 打印

cuigf
(newbie)
05-07-23 11:25
[精华] 开关按钮(toggle button)构件 新 [re: cuigf] 




开关按钮(toggle button)构件


常用函数:


创建一个新的开关按钮构件
GtkWidget *togglebutton1;

togglebutton1 = gtk_toggle_button_new();

togglebutton1 = gtk_toggle_button_new_with_label(“toggle button”);

togglebutton1 = gtk_toggle_button_new_with_mnemonic(“toggle button”);



读取开关按钮的状态
gtk_toggle_button_get_active(GTK_TOGGLE_BUTTON(button))



设置开关按钮的状态
gtk_toggle_button_set_active(GTK_TOGGLE_BUTTON(button), TRUE)

gtk_toggle_button_set_active(GTK_TOGGLE_BUTTON(button), FALSE)



例子:


一、设计界面


步骤:1、新建Glade工程

2、依次放置window构件(大小:300,200)、fixed positions(固定容器)构件、toggle
button(开关按钮)构件。

3、在属性面板中,设置togglebutton1的 label 属性为“开关按钮” 。


4、为togglebutton1构件添加clicked信号响应(注意:object后的文本框里填写togglebutton1
)。

5、保存项目,生成代码。



二、编写代码


运行以前,设置工程属性为“win32控制台程序”。

callbacks.c

void on_togglebutton1_clicked (GtkButton *button,

gpointer user_data)

{

if (gtk_toggle_button_get_active(GTK_TOGGLE_BUTTON(button)))

{ printf("toggle button is on \n"); }

else

{ printf("toggle button is off \n"); }

}



三、运行调试




文章选项: 打印

cuigf
(newbie)
05-07-26 11:04
[精华] 单选按钮Radio Buttons构件 新 [re: cuigf] 


单选按钮Radio Buttons构件


单选按钮构件的常用函数:

创建单选按钮构件的代码:


/*以下代码节选自interface.c*/



/*定义构件*/]

GtkWidget *radiobutton1;

GSList *radiobutton1_group = NULL;

GtkWidget *radiobutton2;

GtkWidget *radiobutton3;



/* 创建构件的步骤,先定义一个radiobutton构件,

再把这个radiobutton构件添加到组(radiobutton1_group)中,

这样,所有的radiobutton构件才能关联成一个整体。
*/



radiobutton1 = gtk_radio_button_new_with_mnemonic (NULL, _("radiobutton1"));

gtk_radio_button_set_group (GTK_RADIO_BUTTON (radiobutton1), radiobutton1_group);

radiobutton1_group = gtk_radio_button_get_group (GTK_RADIO_BUTTON (radiobutton1));



radiobutton2 = gtk_radio_button_new_with_mnemonic (NULL, _("radiobutton2"));

gtk_radio_button_set_group (GTK_RADIO_BUTTON (radiobutton2), radiobutton1_group);

radiobutton1_group = gtk_radio_button_get_group (GTK_RADIO_BUTTON (radiobutton2));



radiobutton3 = gtk_radio_button_new_with_mnemonic (NULL, _("radiobutton3"));

gtk_radio_button_set_group (GTK_RADIO_BUTTON (radiobutton3), radiobutton1_group);

radiobutton1_group = gtk_radio_button_get_group (GTK_RADIO_BUTTON (radiobutton3));



判断单选按钮构件状态的函数(同开关按钮):
gtk_toggle_button_get_active (GTK_TOGGLE_BUTTON (radiobutton1))



一、用Glade设计界面
步骤:1、新建glade工程

     2、依此放置 窗口(400,300)、固定位置、三个单选按钮构件。

     3、为三个单选按钮构件,分别添加toggled信号响应,object后分别填写:radiobutto
n1,radiobutton2,radiobutton3。

     4、保存工程,并生成代码。

二、修改代码
Interface.c

g_signal_connect_swapped ((gpointer) radiobutton1, "toggled",

G_CALLBACK (on_radiobutton1_toggled),

GTK_OBJECT (radiobutton1));

g_signal_connect_swapped ((gpointer) radiobutton2, "toggled",

G_CALLBACK (on_radiobutton2_toggled),

GTK_OBJECT (radiobutton2));

g_signal_connect_swapped ((gpointer) radiobutton3, "toggled",

G_CALLBACK (on_radiobutton3_toggled),

GTK_OBJECT (radiobutton3));



Callbacks.h

void on_radiobutton1_toggled (GtkToggleButton *radiobutton1,

gpointer user_data);

void on_radiobutton2_toggled (GtkToggleButton *radiobutton2,

gpointer user_data);



void on_radiobutton3_toggled (GtkToggleButton *radiobutton3,

gpointer user_data);



Callbacks.c



void on_radiobutton1_toggled (GtkToggleButton *radiobutton1,

gpointer user_data)

{

if (gtk_toggle_button_get_active (GTK_TOGGLE_BUTTON (radiobutton1)))

{

printf("radiobutton1 is True\n");

}

}



void on_radiobutton2_toggled (GtkToggleButton *radiobutton2,

gpointer user_data)

{

if (gtk_toggle_button_get_active (GTK_TOGGLE_BUTTON (radiobutton2)))

{

printf("radiobutton2 is True\n");

}

}



void on_radiobutton3_toggled (GtkToggleButton *radiobutton3,

gpointer user_data)

{

if (gtk_toggle_button_get_active (GTK_TOGGLE_BUTTON (radiobutton3)))

{

printf("radiobutton3 is True\n");

}

}

文章选项: 打印

cuigf
(newbie)
05-07-27 09:55
[精华] 复选按钮check Buttons构件 新 [re: cuigf] 


复选按钮check Buttons构件

/*请注意callbacks.h,callbacks.c文件和单选按钮构件里的不同之处。以现在的为准,以前的
好像不太规范。
*/

/*以下代码节选自interface.c*/

/*定义构件*/

GtkWidget *checkbutton1;

GtkWidget *checkbutton2;

GtkWidget *checkbutton3;



/* 创建构件 */

checkbutton1 = gtk_check_button_new_with_mnemonic (_("checkbutton1"));

checkbutton2 = gtk_check_button_new_with_mnemonic (_("checkbutton2"));

checkbutton3 = gtk_check_button_new_with_mnemonic (_("checkbutton3"));



判断复选按钮构件状态的函数(同开关按钮):

gtk_toggle_button_get_active (GTK_TOGGLE_BUTTON (button))



一、用Glade设计界面

步骤:1、新建glade工程

     2、依此放置 窗口(400,300)、固定位置、三个复选按钮构件、三个标签。

     3、为三个复选按钮构件,分别添加clicked信号响应。

     4、保存工程,并生成代码。

二、修改代码

Interface.c



g_signal_connect ((gpointer) checkbutton1, "clicked",

G_CALLBACK (on_checkbutton1_clicked),

NULL);

g_signal_connect ((gpointer) checkbutton2, "clicked",

G_CALLBACK (on_checkbutton2_clicked),

NULL);

g_signal_connect ((gpointer) checkbutton3, "clicked",

G_CALLBACK (on_checkbutton3_clicked),

NULL);



Callbacks.h

void on_checkbutton1_clicked (GtkButton *button,

gpointer user_data);



void on_checkbutton2_clicked (GtkButton *button,

gpointer user_data);



void on_checkbutton3_clicked (GtkButton *button,

gpointer user_data);



Callbacks.c



void on_checkbutton1_clicked (GtkButton *button,

gpointer user_data)

{

GtkWidget *label1 = lookup_widget (GTK_WIDGET(button), "label1");
if (gtk_toggle_button_get_active (GTK_TOGGLE_BUTTON (button)))

{

gtk_label_set_text(GTK_LABEL(label1),"check1 is true");

}

else

{gtk_label_set_text(GTK_LABEL(label1),"check1 is false");

}

}



void on_checkbutton2_clicked (GtkButton *button,

gpointer user_data)

{

GtkWidget *label2 = lookup_widget (GTK_WIDGET(button), "label2");
if (gtk_toggle_button_get_active (GTK_TOGGLE_BUTTON (button)))

{

gtk_label_set_text(GTK_LABEL(label2),"check2 is true");

}

else

{gtk_label_set_text(GTK_LABEL(label2),"check2 is false");

}

}



void on_checkbutton3_clicked (GtkButton *button,

gpointer user_data)

{

GtkWidget *label3 = lookup_widget (GTK_WIDGET(button), "label3");
if (gtk_toggle_button_get_active (GTK_TOGGLE_BUTTON (button)))

{

gtk_label_set_text(GTK_LABEL(label3),"check3 is true");

}

else

{gtk_label_set_text(GTK_LABEL(label3),"check3 is false");

}

}

文章选项: 打印

cuigf
(newbie)
05-07-27 21:58
[精华] 微调按钮构件(spin buttons) 新 [re: cuigf] 

微调按钮构件(spin buttons)

常用函数:

创建微调按钮构件:
/*创建微调按钮构件要用到“调整对象”,所以还要创建“调整对象”
 以下就是Glade自动创建的微调按钮构件,就用到了“调整对象”*/


GtkObject *spinbutton1_adj;

GtkWidget *spinbutton1;



spinbutton1_adj = gtk_adjustment_new (1, 0, 100, 1, 10, 10);

spinbutton1 = gtk_spin_button_new (GTK_ADJUSTMENT (spinbutton1_adj), 1, 0);


这一节用到的新函数:
取得微调按钮构件的当前值:
函数名: gtk_spin_button_get_value_as_int
用法:
            gfloat  spinvalue1;

gint spinvalue2;

spinvalue1=gtk_spin_button_get_value(GTK_SPIN_BUTTON(spinbutton));

spinvalue2=gtk_spin_button_get_value_as_int(GTK_SPIN_BUTTON(spinbutton));


函数名: sprintf()
用法: sprintf (buf, "%d", spinvalue1);

函数名: lookup_widget()
用法: GtkWidget *label1 = lookup_widget (GTK_WIDGET(spinbutton), "label1");

一、用Glade设计界面
步骤:1、新建glade工程
     2、依此放置 窗口(400,300)、固定位置、标签、微调按钮。
     3、为微调按钮构件,添加value_changed信号响应,object后填写:spinbutton1。

4、设置微调按钮的一些属性:值、最小值、最大值、步进增量、页面增量、页面大小。(这些属性
什么意思,自己捉摸捉摸。)    
5、保存工程,并生成代码。

二、修改代码

Interface.c /*不作任何修改,看你的文件中的部分和这个一样不一样。*/

g_signal_connect_swapped ((gpointer) spinbutton1, "value_changed",

G_CALLBACK (on_spinbutton1_value_changed),

GTK_OBJECT (spinbutton1));



callbacks.h /*不作任何修改,看你的文件和这个一样?
【相关文章】
没有相关文章
【相关评论】
没有相关评论
【发表评论】
姓名:
邮件:
随机码*
评论*
      
|  首 页  |  版权声明  |  联系我们   |  网站地图  |
CopyRight © 2004-2007 bbb软讯网络 All Rigths Reserved.