您的位置:首页 > 其它

GTK+实验

2015-06-01 00:08 246 查看
题目名称 GTK+实验

题目关键字 GTK+实验

题目录入时间 2015-5-24 13:47:12

题目内容

GTK+实验,完成课本实验9,最后打包上传(程序源代码+可运行文件)

简单了解一下glade生成源文件

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

callbacks.c Glade生成的大部分空的回调函数所在的文件,你自己往里面添加代码

callbacks.h (头文件)Glade生成的回调函数的定义文件

main.c 主函数

support.h (头文件)支持文件

在galde生成的devcpp目录里有2个文件

config.h Glade 生成的配置文件

gtk1.dev Glade生成的devcpp工程文件(就是你保存时启的那个名子)。

需要你自己编写代码的文件只有三个(其它文件不要动),它们是:

main.c (一般只需做少量的修改)

callbacks.h (一般只需做少量的修改,甚至不作修改)

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 (_("/346/254/242/350/277/216/350/265/260/350/277/233GTK/347/232/204/344/270/226/347/225/214")); /*新建一个标签*/
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;
}
/*
(点评:版本不一样,里面的代码可能有一些不同)

(这部分内容,能理解多少,理解多少,看不懂也不要紧。)
文件: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;
}


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

文本输入构件 (二)

一、用glade设计界面

1、新建glade工程

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

3、为文本输入构件entry1添加changed信号响应(其它程序设计语言中为事件响应)on_entry1_changed,一定注意在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);

}


三、运行程序

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

注:在linux下,操作很简单,点击 glade 的 build 就会自动产生代码,然后运行改目录下的autogen.sh运行make ,就会在

src 目录下产生可执行的程序

调用glade的界面

Gtk+/Glade编程(二)–入门

builder = gtk_builder_new();
gtk_builder_add_from_file(builder, "dec_inc.glade", NULL);
window = GTK_WIDGET(gtk_builder_get_object(builder, "window"));


懒人写法

window1 = create_window1 ();
entry1 = lookup_widget(GTK_WIDGET(window1), "entry1");
entry3 = lookup_widget(GTK_WIDGET(window1), "entry3");
button1 = lookup_widget(GTK_WIDGET(window1), "button1");
button2 = lookup_widget(GTK_WIDGET(window1), "button2");
g_signal_connect(GTK_OBJECT(window1),"destroy",GTK_SIGNAL_FUNC(closeApp),NULL);
g_signal_connect(GTK_OBJECT(button1),"clicked",GTK_SIGNAL_FUNC(button1_clicked),(gpointer)entry1);

g_signal_connect(GTK_OBJECT(button2),"clicked",GTK_SIGNAL_FUNC(button2_clicked),(gpointer)entry3);
gtk_widget_show (window1);
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: