| 网站首页 | 业界新闻 | 小组 | 威客 | 人才 | 下载频道 | 博客 | 代码贴 | 在线编程 | 编程论坛
欢迎加入我们,一同切磋技术
用户名:   
 
密 码:  
共有 5498 人关注过本帖, 2 人收藏
标题:GTK+实例学习(笔记)
取消只看楼主 加入收藏
guixiaolan
Rank: 3Rank: 3
等 级:新手上路
威 望:6
帖 子:356
专家分:0
注 册:2006-4-20
收藏(2)
 问题点数:0 回复次数:19 
GTK+实例学习(笔记)
第1个例子:建立窗体

程序代码:
#include<gtk/gtk.h>

int main(int argc,char *argv[])
{

 GtkWidget *window;//定义

 gtk_init(&argc,&argv);//初始化

 window=gtk_window_new(GTK_WINDOW_TOPLEVEL);//创建窗口

 gtk_widget_show(window);//显示窗口

 gtk_main();

 return 0;
}

/*

 * GNOME既是一个桌面,也是一个完整的程序设计环境

 * GIMP是UNIX操作系统上的影像处理程序

 * GTK+是GIMP工具包,能支持许多程序设计语言

 * GTK+使用GLIB库和GDK库

 * GLIB定义了数据类型,提供了错误处理和内存管理方面的函数

 * GDK是本地图形化API和GTK+中间的一个过渡层,需要依赖具体的计算机平台,移植GTK+重新编写GDK

 * GTK+的安装就不多述,命令pkg-config --modversion gkt+-2.0检验GTK+2.0

 * 命令gcc 000.c -o 000 `pkg-config --cflags --libs gtk+-2.0`编译程序

 * 执行000即可查看结果,命令./000

 * 如果在命令行中打开,在关闭时并没有退出,要通过CTRL+C来关闭

 */


Screenshot-000.png (2.3 KB)
图片附件: 游客没有浏览图片的权限,请 登录注册
搜索更多相关主题的帖子: 实例 笔记 
2008-09-18 11:58
guixiaolan
Rank: 3Rank: 3
等 级:新手上路
威 望:6
帖 子:356
专家分:0
注 册:2006-4-20
收藏
得分:0 
控制台输出信息
第2个例子:控制台输出信息
程序代码:
#include<gtk/gtk.h>

int main(int argc,char *argv[])
{

 GtkWidget *window;

 gtk_init(&argc,&argv);

 window=gtk_window_new(GTK_WINDOW_TOPLEVEL);

 gtk_widget_show(window);

 g_print("hello world");//在控制台打印信息,通常测试用

 g_warning("hello world");//在控制台输出警告信息

 g_message("hello world");//输出信息

 gtk_main();

 return 0;
}


[[it] 本帖最后由 guixiaolan 于 2008-9-18 22:09 编辑 [/it]]

[url=http://www./]/sign/free.gif" target="_blank">http://ip./sign/free.gif[/url]
2008-09-18 22:07
guixiaolan
Rank: 3Rank: 3
等 级:新手上路
威 望:6
帖 子:356
专家分:0
注 册:2006-4-20
收藏
得分:0 
每隔5秒在控制台打印信息
程序代码:
#include<gtk/gtk.h>

gint n=1;//glib数据类型同C语言基本类型,只是在前面加一个g
gint function(gpointer data);

int main(int argc,char *argv[])
{

 GtkWidget *window;

 gpointer data;

 gint sign;

 gtk_init(&argc,&argv);

 window=gtk_window_new(GTK_WINDOW_TOPLEVEL);

 gtk_widget_show(window);

 sign=g_timeout_add(500,function,data);//每隔5秒打印信息

 gtk_main();

 return 0;
}

gint function(gpointer data)
{

 g_print("hello\n");

 

 if(++n>5)
  return 0;
}

[url=http://www./]/sign/free.gif" target="_blank">http://ip./sign/free.gif[/url]
2008-09-18 22:09
guixiaolan
Rank: 3Rank: 3
等 级:新手上路
威 望:6
帖 子:356
专家分:0
注 册:2006-4-20
收藏
得分:0 
关闭窗体时也从控制台退出
程序代码:
#include<gtk/gtk.h>

int main(int argc,char *argv[])
{

 GtkWidget *window;

 gtk_init(&argc,&argv);

 window=gtk_window_new(GTK_WINDOW_TOPLEVEL);

 g_signal_connect(GTK_OBJECT(window),"destroy",G_CALLBACK(gtk_main_quit),NULL);

 //关闭时自动退出

 gtk_widget_show(window);

 gtk_main();

 return 0;
}

[url=http://www./]/sign/free.gif" target="_blank">http://ip./sign/free.gif[/url]
2008-09-18 22:10
guixiaolan
Rank: 3Rank: 3
等 级:新手上路
威 望:6
帖 子:356
专家分:0
注 册:2006-4-20
收藏
得分:0 
窗体属性
程序代码:
#include<gtk/gtk.h>

void destroy(GtkWidget *widget,gpointer data)
{

 g_print("quit successful!\n");

 gtk_main_quit();
}

int main(int argc,char *argv[])
{

 GtkWidget *window;

 gtk_init(&argc,&argv);

 window=gtk_window_new(GTK_WINDOW_TOPLEVEL);

 g_signal_connect(GTK_OBJECT(window),"destroy",G_CALLBACK(destroy),NULL);//关闭窗口时调用函数

 gtk_window_set_title(GTK_WINDOW(window),"Main Window"); //设置窗体标题

 gtk_window_set_resizable(GTK_WINDOW(window),FALSE); //设置窗体是否可改变大小

 gtk_widget_set_size_request(window,200,200); //设置窗体初始大小

 gtk_widget_show(window);

 gtk_main();

 return 0;
}


Screenshot-004.png (3.78 KB)
图片附件: 游客没有浏览图片的权限,请 登录注册

[url=http://www./]/sign/free.gif" target="_blank">http://ip./sign/free.gif[/url]
2008-09-18 22:12
guixiaolan
Rank: 3Rank: 3
等 级:新手上路
威 望:6
帖 子:356
专家分:0
注 册:2006-4-20
收藏
得分:0 
敏感按钮
程序代码:
#include<gtk/gtk.h>

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),"destroy",G_CALLBACK(gtk_main_quit),NULL);

 button=gtk_button_new_with_label("button");

 gtk_container_add(GTK_CONTAINER(window),button);

 gtk_container_set_border_width(GTK_CONTAINER(window),20);//窗口边框宽度

 gtk_widget_set_sensitive(button,FALSE); //按钮是否敏感,FALSE表示不敏感,则无法单击心以及调用函数

 gtk_widget_show(button);

 gtk_widget_show(window);

 gtk_main();

 return 0;
}


Screenshot-005.png (2.98 KB)
图片附件: 游客没有浏览图片的权限,请 登录注册

[url=http://www./]/sign/free.gif" target="_blank">http://ip./sign/free.gif[/url]
2008-09-18 22:13
guixiaolan
Rank: 3Rank: 3
等 级:新手上路
威 望:6
帖 子:356
专家分:0
注 册:2006-4-20
收藏
得分:0 
按钮布置
程序代码:
#include<gtk/gtk.h>

void PackNewButton(GtkWidget *box,char *szLabel);

int main(int argc,char *argv[])
{

 GtkWidget *window;

 GtkWidget *box;

 gtk_init(&argc,&argv);

 window=gtk_window_new(GTK_WINDOW_TOPLEVEL);

 gtk_signal_connect(GTK_OBJECT(window),"destroy",G_CALLBACK(gtk_main_quit),NULL);

 //box=gtk_vbox_new(FALSE,0);

 box=gtk_hbox_new(FALSE,0);

 

 /* FALSE表示每个构件大小不相同,即每个构件刚好为容纳标号的大小
  * 0是每个构件间隔距离
  */ 

 

 //PackNewButton(box,"button1"); 

 PackNewButton(box,"but1");

 PackNewButton(box,"button2");

 PackNewButton(box,"button3");

 PackNewButton(box,"button4");

 PackNewButton(box,"button5");


 gtk_container_add(GTK_CONTAINER(window),box);

 gtk_widget_show(box);

 gtk_widget_show(window);

 gtk_main();
}

void PackNewButton(GtkWidget *box,char *szLabel)
{

 GtkWidget *button;

 button=gtk_button_new_with_label(szLabel);

 gtk_box_pack_start(GTK_BOX(box),button,FALSE,TRUE,5);

 //第一个FALSE表示变化窗口大小时,子构件大小不变

 gtk_widget_show(button);
}


Screenshot-006.png (4.94 KB)
图片附件: 游客没有浏览图片的权限,请 登录注册

[url=http://www./]/sign/free.gif" target="_blank">http://ip./sign/free.gif[/url]
2008-09-18 22:14
guixiaolan
Rank: 3Rank: 3
等 级:新手上路
威 望:6
帖 子:356
专家分:0
注 册:2006-4-20
收藏
得分:0 
按钮布置2
程序代码:
#include<gtk/gtk.h>

int main(int argc,char *argv[])
{

 GtkWidget *window;

 GtkWidget *table;

 GtkWidget *button;

 gtk_init(&argc,&argv);

 window=gtk_window_new(GTK_WINDOW_TOPLEVEL);

 gtk_signal_connect(GTK_OBJECT(window),"destroy",G_CALLBACK(gtk_main_quit),NULL);

 table=gtk_table_new(2,2,FALSE);//表的行,表的列,子构件是否具有同样的大小


 button=gtk_button_new_with_label("button1");

 gtk_table_attach(GTK_TABLE(table),button,0,1,0,1,GTK_FILL,GTK_FILL,0,0);

 gtk_widget_show(button);


 button=gtk_button_new_with_label("button2");

 gtk_table_attach(GTK_TABLE(table),button,1,2,1,2,GTK_FILL,GTK_FILL,0,0);

 gtk_widget_show(button);


 gtk_container_add(GTK_CONTAINER(window),table);

 gtk_widget_show(table);

 gtk_widget_show(window);

 gtk_main();

 return FALSE;
}


Screenshot-007.png (3.71 KB)
图片附件: 游客没有浏览图片的权限,请 登录注册

[url=http://www./]/sign/free.gif" target="_blank">http://ip./sign/free.gif[/url]
2008-09-18 22:15
guixiaolan
Rank: 3Rank: 3
等 级:新手上路
威 望:6
帖 子:356
专家分:0
注 册:2006-4-20
收藏
得分:0 
固定容器构件
程序代码:
#include <gtk/gtk.h>

GtkWidget *window;
GtkWidget *fixed;
GtkWidget *button;
gint function(gpointer data);
gpointer data;
gint sign;
int x=50;
int y=50;

int main(int argc,char *argv[])
{

 gtk_init(&argc,&argv);

 window=gtk_window_new(GTK_WINDOW_TOPLEVEL);

 gtk_signal_connect(GTK_OBJECT(window),"destroy",G_CALLBACK(gtk_main_quit),NULL);

 fixed=gtk_fixed_new();//创建固定容器构件

 button=gtk_button_new_with_label("button");

 gtk_fixed_put(GTK_FIXED(fixed),button,50,50);//将按钮加入到固定容器构件中,并将固定容器放入到指定位置处

 sign=g_timeout_add(600,function,data);

 gtk_container_add(GTK_CONTAINER(window),fixed);

 gtk_widget_show(fixed);

 gtk_widget_show(button);

 gtk_widget_show(window);

 gtk_main();

 return 0;
}

gint function(gpointer data)
{

 gtk_fixed_move(GTK_FIXED(fixed),button,++x,++y);//移动

 return TRUE;
}

[url=http://www./]/sign/free.gif" target="_blank">http://ip./sign/free.gif[/url]
2008-09-18 22:16
guixiaolan
Rank: 3Rank: 3
等 级:新手上路
威 望:6
帖 子:356
专家分:0
注 册:2006-4-20
收藏
得分:0 
按钮事件
程序代码:
#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);


 button=gtk_button_new_with_label("Button");

 gtk_signal_connect(GTK_OBJECT(button),"pressed",GTK_SIGNAL_FUNC(button_event),"pressed the button");

 gtk_signal_connect(GTK_OBJECT(button),"released",GTK_SIGNAL_FUNC(button_event),"released the button");

 gtk_signal_connect(GTK_OBJECT(button),"clicked",GTK_SIGNAL_FUNC(button_event),"clicked the button");

 gtk_signal_connect(GTK_OBJECT(button),"enter",GTK_SIGNAL_FUNC(button_event),"enter the button");

 gtk_signal_connect(GTK_OBJECT(button),"leave",GTK_SIGNAL_FUNC(button_event),"leave the button");

 //上面5个事件分别是“按下” "释放" "点击" "进入" "离开" 按钮

 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);
}

[url=http://www./]/sign/free.gif" target="_blank">http://ip./sign/free.gif[/url]
2008-09-18 22:17
快速回复:GTK+实例学习(笔记)
数据加载中...
 
   



关于我们 | 广告合作 | 编程中国 | 清除Cookies | TOP | 手机版

编程中国 版权所有,并保留所有权利。
Powered by Discuz, Processed in 0.029414 second(s), 11 queries.
Copyright©2004-2024, BCCN.NET, All Rights Reserved