# GTK+ 简介

> 原文： [http://zetcode.com/gui/gtk2/introduction/](http://zetcode.com/gui/gtk2/introduction/)

这是 GTK+ 编程入门教程。 本教程使用 C 编程语言编写。 它已在 Linux 上创建并经过测试。 GTK+ 编程教程适合新手和中级程序员。 本教程介绍了 GTK+  2。

## GTK+ 

GTK+ 是用于创建图形用户界面的库。 该库是用 C 编程语言创建的。 GTK+ 库也称为 GIMP 工具箱。 最初，该库是在开发 GIMP 图像处理器时创建的。 从那时起，GTK+ 成为 Linux 和 BSD Unix 下最受欢迎的工具包之一。 如今，开源世界中的大多数 GUI 软件都是在 Qt 或 GTK+ 中创建的。 GTK+ 是一个面向对象的应用编程接口。 面向对象的系统是使用 Glib 对象系统创建的，该系统是 GTK+ 库的基础。`GObject`还可以为各种其他编程语言创建语言绑定。 存在用于 C++ ，Python，Perl，Java，C# 和其他编程语言的语言绑定。

GTK+ 本身取决于以下库：

*   Glib
*   Pango
*   ATK
*   GDK
*   GdkPixbuf
*   Cario

Glib 是通用工具库。 它提供各种数据类型，字符串工具，启用错误报告，消息日志记录，使用线程以及其他有用的编程功能。Pango 是一个实现国际化的库。ATK 是可访问性工具包； 它提供了一些工具，可以帮助残障人士使用计算机。GDK 是基础图形系统提供的低级绘图和窗口功能的包装。 在 Linux 上，GDK 位于 X Server 和 GTK+ 库之间。 它处理基本的渲染，例如图形基元，光栅图形，光标，字体以及窗口事件和拖放功能。GdkPixbuf 库是用于图像加载和像素缓冲区操作的工具包。Cario 是用于创建 2D 向量图形的库。 自 2.8 版起，它已包含在 GTK+ 中。

Gnome 和 XFce 桌面环境已使用 GTK+ 库创建。 SWT 和 wxWidgets 是使用 GTK+ 的众所周知的编程框架。 使用 GTK+ 的著名软件应用包括 Firefox 或 Inkscape。

## 编译 GTK+ 应用

要编译 GTK+ 应用，我们有一个方便的工具`pkg-config`。 `pgk-config`返回有关已安装库的元数据。 如果我们要使用特定的库，它将为我们提供必要的依赖库，并包含我们需要的文件。 `pkg-config`程序从特殊的元数据文件中检索有关包的信息。

```c
$ gcc -o simple simple.c `pkg-config --libs --cflags gtk+-2.0`

```

该行编译一个基本程序。 源代码由一个文件`simple.c`组成。

```c
$ pkg-config --cflags gtk+-2.0 | xargs -n3
-pthread -I/usr/include/gtk-2.0 -I/usr/lib/x86_64-linux-gnu/gtk-2.0/include
-I/usr/include/atk-1.0 -I/usr/include/cairo -I/usr/include/gdk-pixbuf-2.0
-I/usr/include/pango-1.0 -I/usr/include/gio-unix-2.0/ -I/usr/include/freetype2
-I/usr/include/glib-2.0 -I/usr/lib/x86_64-linux-gnu/glib-2.0/include -I/usr/include/pixman-1
-I/usr/include/libpng12 -I/usr/include/harfbuzz

```

`--cflags`参数显示编译 GTK+ 程序所需的预处理器和编译标志，包括所有依赖项的标志。

```c
$ pkg-config --libs gtk+-2.0 | xargs -n5
-lgtk-x11-2.0 -lgdk-x11-2.0 -latk-1.0 -lgio-2.0 -lpangoft2-1.0
-lpangocairo-1.0 -lgdk_pixbuf-2.0 -lcairo -lpango-1.0 -lfontconfig
-lgobject-2.0 -lglib-2.0 -lfreetype

```

`--libs`参数列出了必要的库。

## 版本

以下程序将打印 GTK+ 和 Glib 库的版本。

`version.c`

```c
#include <gtk/gtk.h>

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

    gtk_init(&argc, &argv);

    g_printf("GTK+ version: %d.%d.%d\n", gtk_major_version, 
        gtk_minor_version, gtk_micro_version);
    g_printf("Glib version: %d.%d.%d\n", glib_major_version,
        glib_minor_version, glib_micro_version);    

    return 0;
}

```

该程序使用内置常量。

```c
$ ./version 
GTK+ version: 2.24.23
Glib version: 2.40.2

```

这是`version`程序的输出。

## 数据来源

*   [gtk.org](http://www.gtk.org)
*   [gtkforums.com](http://www.gtkforums.com)
*   [GTK+ 2 参考](https://developer.gnome.org/gtk2/2.24/)

这是 GTK+ 库的简介。