{{위키데이터 속성 추적}}
{{소프트웨어 정보
| 이름 = GTK+
| 로고 = GTK logo.svg
| 화면 = Gtk4-widget-factory demos.png
| 개발자 = [[그놈 재단]]
| released = {{시작 날짜와 나이|1998|04|14}}
| ver layout = simple
| latest release version = 4.14.4
| latest release date = {{시작 날짜와 나이|2024|04|02}}<ref name="latest stable">{{메일링 인용
 | url         = https://mail.gnome.org/archives/ftp-release-list/2021-December/msg00071.html
 | title       = gtk 4.6.0
 | date        = 30 December 2021
 | access-date = 23 January 2022
 | last        = Clasen
 | first       = Matthias
 | mailing-list= FTP Releases
}}</ref>
| latest preview version = 4.15.1
| latest preview date = {{시작 날짜와 나이|2024|05|21}}<ref name="latest preview">{{메일링 인용
 | url         = https://mail.gnome.org/archives/ftp-release-list/2021-June/msg00033.html
 | title       = gtk 4.3.1
 | date        = 9 June 2021
 | access-date = 10 July 2021
 | last        = Clasen
 | first       = Matthias
 | mailing-list= FTP Releases}}</ref>
| 운영체제 = [[크로스 플랫폼]]
| 종류 = 개발 라이브러리
| 라이선스 = [[GNU 약소 일반 공중 사용 허가서|LGPL]]
| 웹사이트 = [http://www.gtk.org/ www.gtk.org]
}}

'''GTK'''는 '''김프 툴킷'''(GIMP Toolkit)<ref>{{웹 인용|url=https://www.gtk.org/about/|title=A brief description on how GTK was born.|website=www.gtk.org|access-date=July 5, 2023|archive-date=June 9, 2023|archive-url=https://web.archive.org/web/20230609101108/https://www.gtk.org/about/|url-status=live}}</ref>의 준말로, 초기에 [[김프]]를 위해서 만든 툴킷이었으며 [[X 윈도 시스템]]을 위한 위젯 툴킷 가운데 하나이다. GTK와 [[Qt (프레임워크)|Qt]]는 [[모티프 (위젯 툴킷)|모티프]]에 대한 좋은 대안이 되어 주었다. GTK는 1997년 [[스펜서 킴볼]](Spencer Kimball), [[피터 마티스]](Peter Mattis), [[조시 맥도널드]](Josh MacDonald)가 함께 만든 것이다. 그들은 모두 [[UC 버클리]]에 있는 [[eXperimental Computing Facility]] (XCF) 소속이었다. [[GNU 약소 일반 공중 사용 허가서|LGPL]]로 라이선스 되었기 때문에 GTK는 자유 소프트웨어이자 오픈 소스 소프트웨어이고, GNU 프로젝트의 일부분이다.

== 설계 ==
GTK는 [[C (프로그래밍 언어)|C언어]]로 작성된 객체지향 위젯 툴킷이다. X11 디스플레이 서버 상에서, GTK는 위젯들을 그리는데 Xlib를 사용한다. Xlib는 유연하고 X 윈도 시스템이 작동하지 않는 플랫폼에서도 GTK가 사용될 수 있도록 한다.

GTK는 Qt와 마찬가지로 (다른 많은 위젯 툴킷들과 달리) [[Intrinsics|Xt]]에 기반을 두지 않는다. 그래서 GTK를 많은 다른 환경으로 이식할 수 있었다. 하지만 전통적인 X11 응용 프로그램의 사용자 설정 방식인 X 리소스 데이터베이스에 접근할 수 없다는 단점이 있다.

== 언어 바인딩 ==
[[C++]], [[펄]], [[루비 (프로그래밍 언어)|루비]], [[자바 (프로그래밍 언어)|자바]], [[파이썬]] 등으로의 바인딩을 제공한다. 많은 사람들이 [[에이다 (프로그래밍 언어)|에이다]], [[D (프로그래밍 언어)|D]], [[하스켈]], [[파스칼 (프로그래밍 언어)|파스칼]], [[PHP]], [[닷넷 프레임워크]]로의 바인딩을 작성하였다.
=== [[Hello World 프로그램]] ===
==== [[C (프로그래밍 언어)|C]] ====
* 소스 코드
<syntaxhighlight lang="c">
// Include gtk
#include <gtk/gtk.h>

static void on_activate (GtkApplication *app) {
  // Create a new window
  GtkWidget *window = gtk_application_window_new (app);
  // Create a new button
  GtkWidget *button = gtk_button_new_with_label ("Hello, World!");
  // When the button is clicked, close the window passed as an argument
  g_signal_connect_swapped (button, "clicked", G_CALLBACK (gtk_window_close), window);
  gtk_container_add (GTK_CONTAINER (window), button);
  gtk_widget_show_all (window);
}

int main (int argc, char *argv[]) {
  // Create a new application
  GtkApplication *app = gtk_application_new ("com.example.GtkApplication",
                                             G_APPLICATION_FLAGS_NONE);
  g_signal_connect (app, "activate", G_CALLBACK (on_activate), NULL);
  return g_application_run (G_APPLICATION (app), argc, argv);
}
</syntaxhighlight>
* 빌드 명령
<syntaxhighlight lang="bash">
$ gcc `pkg-config --cflags gtk+-3.0` -o hello-world-gtk hello-world-gtk.c `pkg-config --libs gtk+-3.0`
</syntaxhighlight>
==== [[발라 (프로그래밍 언어)|Vala]] ====
* 소스 코드
<syntaxhighlight lang="vala">
int main (string[] argv) {
    // Create a new application
    var app = new Gtk.Application ("com.example.GtkApplication",
                                   GLib.ApplicationFlags.FLAGS_NONE);

    app.activate.connect (() => {
        // Create a new window
        var window = new Gtk.ApplicationWindow (app);

        // Create a new button
        var button = new Gtk.Button.with_label ("Hello, World!");

        // When the button is clicked, close the window
        button.clicked.connect (() => {
            window.close ();
        });

        window.add (button);
        window.show_all ();
    });

    return app.run (argv);
}
</syntaxhighlight>
* 빌드 명령
<syntaxhighlight lang="bash">
$ valac --pkg gtk+-3.0 gtk-hello.vala
</syntaxhighlight>

== 모양 ==
사용자는 디스플레이 엔진으로 툴킷의 모양을 설정할 수 있다. 엔진들은 [[마이크로소프트 윈도우|윈도우]], [[모티프 (위젯 툴킷)|모티프]], [[Qt (프레임워크)|Qt]], [[넥스트스텝]] 등의 모양으로 그려줄 수 있다.

== GTK를 사용하는 환경 ==
[[파일:gimp2-2.png|오른쪽|섬네일|300px|Screenshot of the [[GIMP]] 2.0 on [[Xfce|Xfce4]]]]
* [[그놈]] 환경은 GTK를 기반으로 사용한다.
* [[Xfce]] 환경도 GTK를 기반으로 사용한다. 하지만 Xfce용 프로그램은 많은 것에 의존하지 않는다. (이것은 그놈 프로그램과 GTK 프로그램을 구분한다)
* [[GPE]], [[Maemo]] (노키아의 인터넷 태블릿 프레임워크), [[액세스 리눅스 플랫폼]] (새로운 팜 OS 호환 PDA 플랫폼) 도 GTK를 기반으로 한다.

GTK 프로그램은 [[KDE]] 같은 다른 데스크톱 환경에서 돌아간다. GTK는 [[마이크로소프트 윈도우]]에서도 돌아간다. [[DirectFB]]와 [[ncurses]] 기반 포팅도 있다.

=== 창 관리자 ===
* [[메타시티]]는 GTK+ 2를 사용한다.
* [[Xfwm]]은 GTK+ 2를 사용한다.

== 그래픽과 관련되지 않은 코드 ==
GTK는 초기에 그래픽과 관련되지 않은 코드를 포함했다. 이들은 링크드 리스트 및 바이너리 트리를 제공했다. [[GObject]]와 함께 오는 이러한 유틸리티 시스템은 [[Glib]]라는 별도의 라이브러리로 쪼개졌고, 이는 그래픽 인터페이스가 필요 없는 프로그래머에게 도움을 준다.

== GTK+ 2 ==
GTK+ 2는 GTK+를 계승하였다. 이것의 새로운 기능은 [[Pango]]를 사용하는 새로운 텍스트 렌더링 엔진, 새로운 테마 엔진, 향상된 접근성, [[유니코드]]로의 완전한 전환이 있다. 하지만 GTK+ 2는 GTK+ 1과 호환성이 없으므로 프로그래머들이 소스를 새로 짜야 한다. 몇몇 프로그램들은 GTK+ 1을 그대로 사용한다. GTK+ 1은 GTK+ 2보다 빠르고 덜 복잡하고 임베디드 환경에 더 적합하다.

GTK+ 2.8부터는 [[카이로 (그래픽)|카이로]] 엔진을 사용해서 벡터 그래픽을 처리한다.

== MS 윈도우에서의 환경설정 ==
공식적으로 [[MSYS|MSYS2]] 혹은 gvsbuild를 통해 설치할 수 있다.

x86-64 환경에서 MSYS2를 이용하는 경우<syntaxhighlight lang="bash">
$ pacman -S mingw-w64-x86_64-gtk3
</syntaxhighlight>를 통해 설치할 수 있으며 GTK용 GUI 빌더 GLADE는<syntaxhighlight lang="bash">
pacman -S mingw-w64-x86_64-glade
</syntaxhighlight>를 통해 설치할 수 있다.

== 차후 개발 ==
* [https://web.archive.org/web/20110301113158/http://live.gnome.org/ProjectRidley Project Ridley]는 GTK+가 현재 포함하지 않는 각종의 라이브러리를 포함하려고 하는 시도이다. 이들은 libgnome, libgnomeui, libgnomeprint22, libgnomeprintui22, libglade, libgnomecanvas, libegg, libeel ,gtkglext를 포함한다.

== 같이 보기 ==
* [[Gtk 샤프|Gtk#]] - [[닷넷 프레임워크]] API를 GTK+로
* [[PyGTK]], [[파이썬]] API를 GTK+로
* [[PHP-GTK]], [[PHP]] 확장
* [[루비 그놈]]

== 각주 ==
{{각주}}

== 외부 링크 ==
* {{위키공용분류-줄}}
* {{공식 웹사이트}}
* [http://library.gnome.org/devel/gtk3/stable/ GTK+ Reference Manual]
* [https://web.archive.org/web/20160624083231/http://gtk-apps.org/ List of GTK+ applications]
* [https://web.archive.org/web/20130317070842/http://gtkfiles.org/ Another list of GTK+ applications]
* [https://sourceforge.net/projects/gtk-mingw/ GTK+2&3 binaries for Windows]

{{그놈}}

{{전거 통제}}

[[분류:GTK| ]]
[[분류:GNU 프로젝트 소프트웨어]]
[[분류:그놈]]
[[분류:위젯 툴킷]]
[[분류:C로 작성된 자유 소프트웨어]]
[[분류:LGPL 라이선스 소프트웨어]]
[[분류:자유 라이브러리]]