5. Глава 31: GTK Быстрая справка (Cheat Sheets)
5.1. Введение
GTK (GIMP Toolkit) — кроссплатформенный набор инструментов для создания графических интерфейсов на C. В версии 3 используется GObject и CSS для стилизации.
5.2. Подключение библиотеки
Для компиляции используйте:
gcc `pkg-config --cflags gtk+-3.0` -o app main.c `pkg-config --libs gtk+-3.0`
5.3. Основные типы и объекты
GtkWidget — базовый тип для всех виджетов
GtkWindow — окно приложения
GtkButton — кнопка
GtkBox — контейнер для компоновки виджетов (горизонтальный или вертикальный)
GtkLabel — текстовая метка
GtkEntry — поле ввода текста
GtkGrid — сеточный контейнер
5.4. Создание окна
GtkWidget *window = gtk_window_new(GTK_WINDOW_TOPLEVEL);
gtk_window_set_title(GTK_WINDOW(window), "Заголовок");
gtk_window_set_default_size(GTK_WINDOW(window), 400, 300);
g_signal_connect(window, "destroy", G_CALLBACK(gtk_main_quit), NULL);
gtk_widget_show_all(window);
5.5. Сигналы и обработчики
GTK использует систему сигналов для событий.
Пример подключения сигнала кнопки:
void on_button_clicked(GtkButton *button, gpointer user_data) {
g_print("Кнопка нажата\n");
}
GtkWidget *button = gtk_button_new_with_label("Нажми меня");
g_signal_connect(button, "clicked", G_CALLBACK(on_button_clicked), NULL);
5.6. Компоновка (Layout)
Пример использования GtkBox для вертикального размещения:
GtkWidget *vbox = gtk_box_new(GTK_ORIENTATION_VERTICAL, 5);
gtk_box_pack_start(GTK_BOX(vbox), widget1, TRUE, TRUE, 0);
gtk_box_pack_start(GTK_BOX(vbox), widget2, TRUE, TRUE, 0);
5.7. Стандартный цикл GTK
gtk_init(NULL, NULL);
gtk_main();
5.8. Работа с виджетами
gtk_widget_show(widget) — показать виджет
gtk_widget_hide(widget) — скрыть виджет
gtk_widget_set_sensitive(widget, gboolean) — сделать виджет активным/неактивным
5.9. Диалоги
Пример простого диалога:
GtkWidget *dialog = gtk_message_dialog_new(GTK_WINDOW(parent_window),
GTK_DIALOG_DESTROY_WITH_PARENT,
GTK_MESSAGE_INFO,
GTK_BUTTONS_OK,
"Сообщение пользователю");
gtk_dialog_run(GTK_DIALOG(dialog));
gtk_widget_destroy(dialog);
5.10. CSS-стилизация
Для кастомизации интерфейса можно использовать CSS-файлы и применять их через GtkCssProvider.
Пример подключения:
GtkCssProvider *provider = gtk_css_provider_new();
gtk_css_provider_load_from_path(provider, "style.css", NULL);
gtk_style_context_add_provider_for_screen(gdk_screen_get_default(),
GTK_STYLE_PROVIDER(provider),
GTK_STYLE_PROVIDER_PRIORITY_USER);
g_object_unref(provider);
5.11. Глава 31. Советы и рекомендации
Используйте GObject для расширения виджетов и построения собственных классов.
Обязательно освобождайте ресурсы — GTK активно использует указатели и объекты с подсчетом ссылок.
Для отладки удобно использовать g_print() и GTK_DEBUG переменные среды.
Следите за тем, чтобы GTK вызывался из основного потока (main thread).
Для сложных интерфейсов применяйте GtkBuilder и файлы .ui (XML).
Используйте сигналы и обратные вызовы для разделения логики и UI.
Помните про принцип «не блокировать основной цикл» — для длительных операций используйте GThread или GAsync.
5.12. Онлайн инструменты и документация
Официальная документация GTK3: https://docs.gtk.org/gtk3/
GTK API Reference: https://developer.gnome.org/gtk3/stable/
GObject Reference: https://developer.gnome.org/gobject/stable/
GTK Tutorials (на английском): https://developer.gnome.org/gtk3/stable/chap-tutorials.html
Онлайн-компилятор C с поддержкой GTK (ограниченно): https://replit.com/languages/c
Компилятор Godbolt с поддержкой pkg-config: https://godbolt.org/
C Reference (общее по языку C): https://en.cppreference.com/w/c
C Tutor (визуализатор кода): https://pythontutor.com/c.html#mode=edit
OnlineGDB C Compiler & Debugger: https://www.onlinegdb.com/online_c_compiler
—