GTK
| 파일:GTK logo.svg | |
| 파일:Gtk4-widget-factory demos.png | |
| 개발자 | 그놈 재단 |
|---|---|
| 발표일 | 1998년 4월 14일 |
| 안정화 버전 | 4.20.0
/ 2025년 8월 29일 |
| 미리보기 버전 | 4.17.4
/ 2025년 2월 1일 |
| 저장소 |
|
| 엔진 | |
| 운영 체제 | 크로스 플랫폼 |
| 종류 | 개발 라이브러리 |
| 라이선스 | LGPL |
| 웹사이트 | www.gtk.org |
GTK는 김프 툴킷(GIMP Toolkit)[1]의 준말로, 초기에 김프를 위해서 만든 툴킷이었으며 X 윈도 시스템을 위한 위젯 툴킷 가운데 하나이다. GTK와 Qt는 모티프에 대한 좋은 대안이 되어 주었다. GTK는 1997년 스펜서 킴볼(Spencer Kimball), 피터 마티스(Peter Mattis), 조시 맥도널드(Josh MacDonald)가 함께 만든 것이다. 그들은 모두 UC 버클리에 있는 eXperimental Computing Facility (XCF) 소속이었다. LGPL로 라이선스 되었기 때문에 GTK는 자유 소프트웨어이자 오픈 소스 소프트웨어이고, GNU 프로젝트의 일부분이다.
설계
GTK는 C언어로 작성된 객체지향 위젯 툴킷이다. X11 디스플레이 서버 상에서, GTK는 위젯들을 그리는데 Xlib를 사용한다. Xlib는 유연하고 X 윈도 시스템이 작동하지 않는 플랫폼에서도 GTK가 사용될 수 있도록 한다.
GTK는 Qt와 마찬가지로 (다른 많은 위젯 툴킷들과 달리) Xt에 기반을 두지 않는다. 그래서 GTK를 많은 다른 환경으로 이식할 수 있었다. 하지만 전통적인 X11 응용 프로그램의 사용자 설정 방식인 X 리소스 데이터베이스에 접근할 수 없다는 단점이 있다.
언어 바인딩
C++, 펄, 루비, 자바, 파이썬 등으로의 바인딩을 제공한다. 많은 사람들이 에이다, D, 하스켈, 파스칼, PHP, 닷넷 프레임워크로의 바인딩을 작성하였다.
- 소스 코드
// 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);
}
- 빌드 명령
$ gcc `pkg-config --cflags gtk+-3.0` -o hello-world-gtk hello-world-gtk.c `pkg-config --libs gtk+-3.0`
- 소스 코드
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);
}
- 빌드 명령
$ valac --pkg gtk+-3.0 gtk-hello.vala
모양
사용자는 디스플레이 엔진으로 툴킷의 모양을 설정할 수 있다. 엔진들은 윈도우, 모티프, Qt, 넥스트스텝 등의 모양으로 그려줄 수 있다.
GTK를 사용하는 환경
- 그놈 환경은 GTK를 기반으로 사용한다.
- Xfce 환경도 GTK를 기반으로 사용한다. 하지만 Xfce용 프로그램은 많은 것에 의존하지 않는다. (이것은 그놈 프로그램과 GTK 프로그램을 구분한다)
- GPE, Maemo (노키아의 인터넷 태블릿 프레임워크), 액세스 리눅스 플랫폼 (새로운 팜 OS 호환 PDA 플랫폼) 도 GTK를 기반으로 한다.
GTK 프로그램은 KDE 같은 다른 데스크톱 환경에서 돌아간다. GTK는 마이크로소프트 윈도우에서도 돌아간다. DirectFB와 ncurses 기반 포팅도 있다.
창 관리자
그래픽과 관련되지 않은 코드
GTK는 초기에 그래픽과 관련되지 않은 코드를 포함했다. 이들은 링크드 리스트 및 바이너리 트리를 제공했다. GObject와 함께 오는 이러한 유틸리티 시스템은 Glib라는 별도의 라이브러리로 쪼개졌고, 이는 그래픽 인터페이스가 필요 없는 프로그래머에게 도움을 준다.
GTK+ 2
GTK+ 2는 GTK+를 계승하였다. 이것의 새로운 기능은 Pango를 사용하는 새로운 텍스트 렌더링 엔진, 새로운 테마 엔진, 향상된 접근성, 유니코드로의 완전한 전환이 있다. 하지만 GTK+ 2는 GTK+ 1과 호환성이 없으므로 프로그래머들이 소스를 새로 짜야 한다. 몇몇 프로그램들은 GTK+ 1을 그대로 사용한다. GTK+ 1은 GTK+ 2보다 빠르고 덜 복잡하고 임베디드 환경에 더 적합하다.
GTK+ 2.8부터는 카이로 엔진을 사용해서 벡터 그래픽을 처리한다.
MS 윈도우에서의 환경설정
공식적으로 MSYS2 혹은 gvsbuild를 통해 설치할 수 있다.
x86-64 환경에서 MSYS2를 이용하는 경우
$ pacman -S mingw-w64-x86_64-gtk3
를 통해 설치할 수 있으며 GTK용 GUI 빌더 GLADE는
pacman -S mingw-w64-x86_64-glade
를 통해 설치할 수 있다.
차후 개발
- Project Ridley는 GTK+가 현재 포함하지 않는 각종의 라이브러리를 포함하려고 하는 시도이다. 이들은 libgnome, libgnomeui, libgnomeprint22, libgnomeprintui22, libglade, libgnomecanvas, libegg, libeel ,gtkglext를 포함한다.
같이 보기
각주
- ↑ “A brief description on how GTK was born.”. 《www.gtk.org》. 2023년 6월 9일에 원본 문서에서 보존된 문서. 2023년 7월 5일에 확인함.
외부 링크
- 섬네일을 만드는 중 오류 발생: 위키미디어 공용에 [{{fullurl:Commons:모듈:WikidataIB 508번째 줄에서 Lua 오류: attempt to index field 'wikibase' (a nil value).|uselang=ko}} GTK] 관련 미디어 분류가 있습니다.
- 모듈:Official_website 90번째 줄에서 Lua 오류: attempt to index field 'wikibase' (a nil value).
- GTK+ Reference Manual 보관됨 2011-02-26 - 웨이백 머신
- List of GTK+ applications
- Another list of GTK+ applications
- GTK+2&3 binaries for Windows
모듈:Authority_control 159번째 줄에서 Lua 오류: attempt to index field 'wikibase' (a nil value).
- 스크립트 오류가 있는 문서
- 잘못된 파일 링크가 포함된 문서
- 웹아카이브 틀 웨이백 링크
- 위키데이터 속성 P18을 사용하는 문서
- 위키데이터 속성 P41을 사용하는 문서
- 위키데이터 속성 P94를 사용하는 문서
- 위키데이터 속성 P117을 사용하는 문서
- 위키데이터 속성 P154를 사용하는 문서
- 위키데이터 속성 P213을 사용하는 문서
- 위키데이터 속성 P227을 사용하는 문서
- 위키데이터 속성 P242를 사용하는 문서
- 위키데이터 속성 P244를 사용하는 문서
- 위키데이터 속성 P245를 사용하는 문서
- 위키데이터 속성 P268을 사용하는 문서
- 위키데이터 속성 P269를 사용하는 문서
- 위키데이터 속성 P271을 사용하는 문서
- 위키데이터 속성 P347을 사용하는 문서
- 위키데이터 속성 P349를 사용하는 문서
- 위키데이터 속성 P350을 사용하는 문서
- 위키데이터 속성 P373을 사용하는 문서
- 위키데이터 속성 P380을 사용하는 문서
- 위키데이터 속성 P396을 사용하는 문서
- 위키데이터 속성 P409를 사용하는 문서
- 위키데이터 속성 P428을 사용하는 문서
- 위키데이터 속성 P434를 사용하는 문서
- 위키데이터 속성 P435를 사용하는 문서
- 위키데이터 속성 P436을 사용하는 문서
- 위키데이터 속성 P454를 사용하는 문서
- 위키데이터 속성 P496을 사용하는 문서
- 위키데이터 속성 P549를 사용하는 문서
- 위키데이터 속성 P650을 사용하는 문서
- 위키데이터 속성 P651을 사용하는 문서
- 위키데이터 속성 P691을 사용하는 문서
- 위키데이터 속성 P716을 사용하는 문서
- 위키데이터 속성 P781을 사용하는 문서
- 위키데이터 속성 P791을 사용하는 문서
- 위키데이터 속성 P864를 사용하는 문서
- 위키데이터 속성 P865를 사용하는 문서
- 위키데이터 속성 P886을 사용하는 문서
- 위키데이터 속성 P902를 사용하는 문서
- 위키데이터 속성 P906을 사용하는 문서
- 위키데이터 속성 P947을 사용하는 문서
- 위키데이터 속성 P950을 사용하는 문서
- 위키데이터 속성 P966을 사용하는 문서
- 위키데이터 속성 P982를 사용하는 문서
- 위키데이터 속성 P1003을 사용하는 문서
- 위키데이터 속성 P1004를 사용하는 문서
- 위키데이터 속성 P1005를 사용하는 문서
- 위키데이터 속성 P1006을 사용하는 문서
- 위키데이터 속성 P1015를 사용하는 문서
- 위키데이터 속성 P1045를 사용하는 문서
- 위키데이터 속성 P1048을 사용하는 문서
- 위키데이터 속성 P1053을 사용하는 문서
- 위키데이터 속성 P1146을 사용하는 문서
- 위키데이터 속성 P1153을 사용하는 문서
- 위키데이터 속성 P1157을 사용하는 문서
- 위키데이터 속성 P1186을 사용하는 문서
- 위키데이터 속성 P1225를 사용하는 문서
- 위키데이터 속성 P1248을 사용하는 문서
- 위키데이터 속성 P1273을 사용하는 문서
- 위키데이터 속성 P1315를 사용하는 문서
- 위키데이터 속성 P1323을 사용하는 문서
- 위키데이터 속성 P1330을 사용하는 문서
- 위키데이터 속성 P1362를 사용하는 문서
- 위키데이터 속성 P1368을 사용하는 문서
- 위키데이터 속성 P1375를 사용하는 문서
- 위키데이터 속성 P1407을 사용하는 문서
- 위키데이터 속성 P1556을 사용하는 문서
- 위키데이터 속성 P1584를 사용하는 문서
- 위키데이터 속성 P1695를 사용하는 문서
- 위키데이터 속성 P1707을 사용하는 문서
- 위키데이터 속성 P1736을 사용하는 문서
- 위키데이터 속성 P1886을 사용하는 문서
- 위키데이터 속성 P1890을 사용하는 문서
- 위키데이터 속성 P1907을 사용하는 문서
- 위키데이터 속성 P1908을 사용하는 문서
- 위키데이터 속성 P1960을 사용하는 문서
- 위키데이터 속성 P1986을 사용하는 문서
- 위키데이터 속성 P2041을 사용하는 문서
- 위키데이터 속성 P2163을 사용하는 문서
- 위키데이터 속성 P2174를 사용하는 문서
- 위키데이터 속성 P2268을 사용하는 문서
- 위키데이터 속성 P2349를 사용하는 문서
- 위키데이터 속성 P2418을 사용하는 문서
- 위키데이터 속성 P2456을 사용하는 문서
- 위키데이터 속성 P2484를 사용하는 문서
- 위키데이터 속성 P2558을 사용하는 문서
- 위키데이터 속성 P2750을 사용하는 문서
- 위키데이터 속성 P2980을 사용하는 문서
- 위키데이터 속성 P3223을 사용하는 문서
- 위키데이터 속성 P3233을 사용하는 문서
- 위키데이터 속성 P3348을 사용하는 문서
- 위키데이터 속성 P3372를 사용하는 문서
- 위키데이터 속성 P3407을 사용하는 문서
- 위키데이터 속성 P3430을 사용하는 문서
- 위키데이터 속성 P3544를 사용하는 문서
- 위키데이터 속성 P3562를 사용하는 문서
- 위키데이터 속성 P3563을 사용하는 문서
- 위키데이터 속성 P3601을 사용하는 문서
- 위키데이터 속성 P3723을 사용하는 문서
- 위키데이터 속성 P3788을 사용하는 문서
- 위키데이터 속성 P3829를 사용하는 문서
- 위키데이터 속성 P3863을 사용하는 문서
- 위키데이터 속성 P3920을 사용하는 문서
- 위키데이터 속성 P3993을 사용하는 문서
- 위키데이터 속성 P4038을 사용하는 문서
- 위키데이터 속성 P4055를 사용하는 문서
- 위키데이터 속성 P4114를 사용하는 문서
- 위키데이터 속성 P4143을 사용하는 문서
- 위키데이터 속성 P4186을 사용하는 문서
- 위키데이터 속성 P4423을 사용하는 문서
- 위키데이터 속성 P4457을 사용하는 문서
- 위키데이터 속성 P4534를 사용하는 문서
- 위키데이터 속성 P4535를 사용하는 문서
- 위키데이터 속성 P4581을 사용하는 문서
- 위키데이터 속성 P4613을 사용하는 문서
- 위키데이터 속성 P4955를 사용하는 문서
- 위키데이터 속성 P5034를 사용하는 문서
- 위키데이터 속성 P5226을 사용하는 문서
- 위키데이터 속성 P5288을 사용하는 문서
- 위키데이터 속성 P5302를 사용하는 문서
- 위키데이터 속성 P5321을 사용하는 문서
- 위키데이터 속성 P5368을 사용하는 문서
- 위키데이터 속성 P5504를 사용하는 문서
- 위키데이터 속성 P5587을 사용하는 문서
- 위키데이터 속성 P5736을 사용하는 문서
- 위키데이터 속성 P5818을 사용하는 문서
- 위키데이터 속성 P6213을 사용하는 문서
- 위키데이터 속성 P6734를 사용하는 문서
- 위키데이터 속성 P6792를 사용하는 문서
- 위키데이터 속성 P6804를 사용하는 문서
- 위키데이터 속성 P6829를 사용하는 문서
- 위키데이터 속성 P7293을 사용하는 문서
- 위키데이터 속성 P7303을 사용하는 문서
- 위키데이터 속성 P7314를 사용하는 문서
- 위키데이터 속성 P7902를 사용하는 문서
- 위키데이터 속성 P8034를 사용하는 문서
- 위키데이터 속성 P8189를 사용하는 문서
- 위키데이터 속성 P8381을 사용하는 문서
- 위키데이터 속성 P8671을 사용하는 문서
- 위키데이터 속성 P8980을 사용하는 문서
- 위키데이터 속성 P9070을 사용하는 문서
- 위키데이터 속성 P9692를 사용하는 문서
- 위키데이터 속성 P9725를 사용하는 문서
- 위키데이터 속성 P9984를 사용하는 문서
- 위키데이터 속성 P10020을 사용하는 문서
- 위키데이터 속성 P10299를 사용하는 문서
- 위키데이터 속성 P10608을 사용하는 문서
- 위키데이터 속성 P10832를 사용하는 문서
- 위키데이터 속성 P11249를 사용하는 문서
- 위키데이터 속성 P11646을 사용하는 문서
- 위키데이터 속성 P11729를 사용하는 문서
- 위키데이터 속성 P12204를 사용하는 문서
- 위키데이터 속성 P12362를 사용하는 문서
- 위키데이터 속성 P12754를 사용하는 문서
- 위키데이터 속성 P13049를 사용하는 문서
- GTK
- GNU 프로젝트 소프트웨어
- 그놈
- 위젯 툴킷
- C로 작성된 자유 소프트웨어
- LGPL 라이선스 소프트웨어
- 자유 라이브러리
- X 라이브러리