0
  • 聊天消息
  • 系统消息
  • 评论与回复
登录后你可以
  • 下载海量资料
  • 学习在线课程
  • 观看威廉希尔官方网站 视频
  • 写文章/发帖/加入社区
会员中心
创作中心

完善资料让更多小伙伴认识你,还能领取20积分哦,立即完善>

3天内不再提示

GTK入门教程

嵌入式威廉希尔官方网站 来源:嵌入式威廉希尔官方网站 作者:嵌入式威廉希尔官方网站 2022-11-23 11:17 次阅读

1.GTK简介

GTK(GIMP Toolkit)是一套源码以LGPL许可协议分发、跨平台的图形工具包。最初是为GIMP写的,已成为一个功能强大、设计灵活的一个通用图形库,是GNU/Linux下开发图形界面的应用程序的主流开发工具之一。当然,GTK也是支持跨平台的,支持Unix类的系统、Windows,甚至手机平台。

GTK是使用C语言写的,所以其原生API都是面向C的,同时GTK的一大特点是,在C语言层面实现了面向对象的特性。GTK是完全免费的,而且基于LGPL协议,这可以保证私有软件通过链接使用GTK可以不把软件源代码开放,对商业应用较友好,这跟GPL协议是不一样的。也正是LGPL协议,使得早些年Gnome(基于GTK编写)风头胜过KDE(基于QT编写)。

GTK+ 从目前的发展趋势来看,越来越成为 Linux 和 GNOME 的 native toolkit,对于跨平台的考虑越来越少了。GNOME 目前仍是 Linux 平台最主流的桌面系统,而像 Pantheon、Cinnamon 等桌面也只是 GNOME 换了个壳,底层也是 GNOME 威廉希尔官方网站 栈,所以 GTK+ 在这方面仍会大有发展。

2.GTK和GTK+

上面只是说了gtk,但我要学习的是gtk+。它们之间有什么关系呢?gtk+的作者之一PerterMattis说他原来开发的gtk包含了三套函数库, libglib、libgdk,和 libgtk,这些库没有采用面向对象机制,因而无法实现构件的复用,而且消息机制是使用标准的回调机制实现的,而非现在的gtk+所提供的信号机制。“+”是用来区分原始版本和新版本的。gtk+依然是完全使用C语言开发的,但在设计上灵活运用了面向对象设计(OOD)思想(谁说只有C++javaC#这样的语言可以OOD 呢)。

3.Linux下第一个GTK程序

3.1 查看系统是否安装了GTK

  pkg-config命令可查看安装库的详细信息

$ pkg-config  --list-all | grep gtk
gtk-sharp-3.0                  Gtk - Gtk
gtk+-unix-print-2.0            GTK+ - GTK+ Unix print support
gtk+-x11-2.0                   GTK+ - GTK+ Graphical UI Library (x11 target)
gtk+-2.0                       GTK+ - GTK+ Graphical UI Library (x11 target)

若没有gtk,则在线安装

sudo apt-get install libgtk2.0-dev

3.2 第一个GTK程序示例

#include 
int main(int argc,char *argv[])
{
	/* GtkWidget 是构件的存储类型 */
	GtkWidget *window;
	/*每一个GTK程序都要调用*/
	gtk_init(&argc, &argv);
	/*创建一个新的窗口*/
	window= gtk_window_new(GTK_WINDOW_TOPLEVEL);
	/*设置窗口标题*/
	gtk_window_set_title(GTK_WINDOW(window),"GTK Hello");
	/*设置窗口大小*/
	gtk_widget_set_usize(window, 200, 200);
	/*显示窗口*/
	gtk_widget_show_all (window); 
	/*所有的 GTK 程序必须有一个 gtk_main() 函数。
	程序运行停在这里等待事件 (如键盘事件或鼠标事件) 的发生。 */
	gtk_main();
	return 0;
}
  • 程序编译:
gcc main.c  `pkg-config --cflags --libs gtk+-2.0`
poYBAGN9kMCAGHdNAAAkSiEcees409.png#pic_center

编译参数

pkg-config --cflags gtk±2.0 列出include 目录,pkg-config --libs gtk±2.0列出编译连接库,也可以合在一起,像这样:pkg-config --cflags --libs gtk±2.0。

这里使用了“命令替换”。 命令替换(commandsubstitution)使得可以捕获一个命令的输出而在另一个命令中替换它。这个单引号不是回车键左边的那个,而是 ESC 键下面的那个。

  • 连接时常用的库:
• GTK 库(-lgtk),构件库,基于GDK。
• GDK 库(-lgdk),Xlib库的封装(wrapper)。
• gdk-pixbuf 库(-lgdk_pixbuf),图像处理库。
• Pango 库(-lpango),处理国际化文本。
• gobject 库(-lgobject),包含作为 GTK 基础的类型系统。
• gmodule 库(-lgmodule),动态运行库。
• GLib 库(-lglib),包含各种函数; GTK是基于 GLib 的,因此你总需要这个库。
• Xlib 库(-lX11),GDK 要使用。
• Xext 库(-lXext),包含共享内存位图和其它 X 扩展。
• math 库(-lm),数学库,这个被 GTK 因各种目的而使用。

3.3相关函数接口介绍

  1. gtk初始化gtk_init
void gtk_init (int *argc, char ***argv)
函数功能: gtk初始化,会在每个gtk程序中调用。该函数设定了默认的视频(visual)和颜色映射模式(color map)。

2.gkt主处理循环gtk_main

void gtk_main (void)
函数功能: 当程序运行到这里,GTK 会“睡着”等待 X 事件 (如按钮或键盘按下)、超时(timeouts)或文件 IO 通知发生。
          但是在调用gtk_main_quit函数以前,对gtk_main函数的调用并不返回,即使你关闭了窗口,程序仍然在运行(上述示例演示了此效果),
         在这种情况下,我们在调用gtk_main函数之前应该先建立回呼函数,而且设置GTK+使得在出现某些信号时转而执行应用软件,由应用软件接着进行处理。

审核编辑:汤梓红

声明:本文内容及配图由入驻作者撰写或者入驻合作网站授权转载。文章观点仅代表作者本人,不代表电子发烧友网立场。文章及其配图仅供工程师学习之用,如有内容侵权或者其他违规问题,请联系本站处理。 举报投诉
  • Linux
    +关注

    关注

    87

    文章

    11302

    浏览量

    209430
  • C语言
    +关注

    关注

    180

    文章

    7604

    浏览量

    136771
收藏 人收藏

    评论

    相关推荐

    单片机入门教程

    单片机入门教程
    发表于 03-21 20:27 425次下载

    studio使用入门教程

    studio使用入门教程
    发表于 01-09 10:44 0次下载

    硬件工程师入门教程

    硬件工程师入门教程硬件工程师入门教程硬件工程师入门教程硬件工程师入门教程硬件工程师入门教程
    发表于 01-05 15:53 257次下载

    C语言入门教程

    很好的C语言入门教程,可以肯定的说这个教程只是为初学或入门者准备的
    发表于 01-22 14:46 7次下载

    Java经典入门教程

    Java经典入门教程,PDF格式,经典教程。
    发表于 03-14 11:16 0次下载

    protel99se入门教程

    protel99se入门教程,单片机入门教程
    发表于 05-09 10:59 63次下载

    proteus入门教程

    proteus入门教程,仿真实例,需要的下载看看。
    发表于 06-03 14:30 0次下载

    Verilog HDL 华为入门教程

    Verilog HDL 华为入门教程
    发表于 06-03 16:57 45次下载

    51单片机c51语言入门教程C语言入门教程

    51单片机c51语言入门教程,C语言入门教程
    发表于 08-29 15:02 32次下载

    AD6.0初级入门教程

    AD6.0初级入门教程
    发表于 12-09 16:25 0次下载

    arduino入门教程 非常适合入门

    arduino入门教程 非常适合入门
    发表于 09-21 09:20 67次下载
    arduino<b class='flag-5'>入门教程</b> 非常适合<b class='flag-5'>入门</b>

    新手Android编程入门教程

    新手Android编程入门教程
    发表于 10-24 08:58 9次下载
    新手Android编程<b class='flag-5'>入门教程</b>

    Python经典入门教程

    Python的经典入门教程资料分享。
    发表于 06-01 10:25 117次下载

    硬件入门教程

    硬件入门教程
    发表于 07-04 14:49 77次下载

    PADS详细入门教程

    PADS 详细入门教程
    发表于 09-28 09:59 98次下载