题目名称 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的界面
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);
531

被折叠的 条评论
为什么被折叠?



