GTK+ 2.0 Tutorial |
||
---|---|---|
Первое что нужно сделать, это конечно скачать и установить GTK. Вы всегда можете найти последнюю версию на ftp.gtk.org. Вы также можете посмотреть информацию об исходном коде GTK на http://www.gtk.org/. GTK использует GNU autoconf для конфигурации. Для просмотра справки наберите ./configure --help.
Исходный код GTK содержит все примеры приведенные в данном руководстве, а также Makefiles для упрощенной компиляции.
Для начала мы рассмотрим пример самой простой программы на GTK. Эта программа создает окно размером 200x200 pixel и не совершает никаких действий кроме как выход после ввода соответствующей команды shell.
#include <gtk/gtk.h>
int main( int argc,
char *argv[] )
{
GtkWidget *window;
gtk_init (&argc, &argv);
window = gtk_window_new (GTK_WINDOW_TOPLEVEL);
gtk_widget_show (window);
gtk_main ();
return 0;
}
|
Вы можете скомпилировать программу используя компилятор gcc:
gcc base.c -o base `pkg-config --cflags --libs gtk+-2.0`
О возможных вариантах компиляции объясняется ниже в Компиляция Hello World.
Все программы будут конечно включать заголовочный файл gtk/gtk.h, который объявляет переменные, функции, структуры, и т.д. использующиеся в вашей GTK программе.
Следующая строка:
gtk_init(&argc, &argv);
|
вызов функции gtk_init(gint *argc, gchar ***argv) которая используется во всех GTK программах. Она создает установки визуальной и цветовой карты, а также запускает процесс вызова функции gdk_init(gint *argc, gchar ***argv). Эта функция инициализирует библиотеки для использования, устанавливает по умолчанию обработчики сигналов, и проверяет аргументы командной строки вашей программы, производя поиск одного из следующих:
--gtk-module
--g-fatal-warnings
--gtk-debug
--gtk-no-debug
--gdk-debug
--gdk-no-debug
--display
--sync
--name
--class
Проходя по списку происходит поиск объявленных аргументов вашей программы для дальнейшего разбора или игнорирования. Так создаётся ряд стандартных аргументов для всех GTK программ.
Следующие две строчки кода выводят на дисплей окно программы.
window = gtk_window_new (GTK_WINDOW_TOPLEVEL);
gtk_widget_show (window);
|
Аргумент GTK_WINDOW_TOPLEVEL определяет специфику расположения и оформления окна в менеджере окон. Чтобы не создавалось окно размером 0x0, по умолчанию принят размер 200x200 для всех дочерних окон, вы также можете манипулировать этими значениями.
Функция gtk_widget_show() позволяет GTK понять какие параметры мы установили для виджетов и правильно отобразить их.
Последняя строка вводит в главный цикл GTK процесса (main processing loop).
gtk_main ();
|
gtk_main() ещё один вызов который используется в любой программе GTK. Когда программа доходит до этого вызова, GTK начинает ожидать X события (такого как нажатие кнопки мыши или клавиатуры), прерывания, или файлового ввода вывода. Однако в нашем простом примере никаких событий не ожидается.
Еще одна программа в виде окна с кнопкой. Это классический "hello world" с использованием GTK.
#include <gtk/gtk.h>
/* Это функция обратного вызова. Аргументы в данном
* примере отсутствуют.
* Подробней об обратных вызовах будет сказано ниже. */
void hello( GtkWidget *widget,
gpointer data )
{
g_print ("Hello World\n");
}
gint delete_event( GtkWidget *widget,
GdkEvent *event,
gpointer data )
{
/* Если вы вернете FALSE в "delete_event" обработчик сигналов,
* GTK создаст "destroy" разрушающий сигнал. Возвращенный TRUE говорит
* о нежелании закрывать окно.
* Это полезно при всплывающих типах диалогов
* 'вы уверены что хотите выйти?'*/
g_print ("delete event occurred\n");
/* Измените TRUE на FALSE и главное окно будет закрыто
* с "delete_event". */
return TRUE;
}
/* Другой вызов */
void destroy( GtkWidget *widget,
gpointer data )
{
gtk_main_quit ();
}
int main( int argc,
char *argv[] )
{
/* GtkWidget является типом хранения для виджетов */
GtkWidget *window;
GtkWidget *button;
/* Этот вызов используется во всех GTK программах. Аргументы из командной строки
* разбираются и возвращаются в приложение. */
gtk_init (&argc, &argv);
/* создается новое окно */
window = gtk_window_new (GTK_WINDOW_TOPLEVEL);
/* Когда окну поступает "delete_event" сигнал (это делает
* менеджер окон, обычно "close" опция в верхнем заголовке окна),
* задаётся вопрос delete_event() функции, как обсуждалось выше.
* Данные поступают в функцию обратного вызова являясь
* NULL и игнорируются. */
g_signal_connect (G_OBJECT (window), "delete_event",
G_CALLBACK (delete_event), NULL);
/* Здесь мы соединяем "destroy" событие с обработчиком сигнала.
* Это делается вызовом gtk_widget_destroy() в окне,
* или если возвращаем FALSE в обратном вызове "delete_event". */
g_signal_connect (G_OBJECT (window), "destroy",
G_CALLBACK (destroy), NULL);
/* Устанавливаем ширину окантовки окна */
gtk_container_set_border_width (GTK_CONTAINER (window), 10);
/* Создаем новую кнопку с ярлыком "Hello World". */
button = gtk_button_new_with_label ("Hello World");
/* Когда кнопка получит "clicked" сигнал, то вызовет
* функцию hello() с NULL аргументом. Функция hello()
* определена выше. */
g_signal_connect (G_OBJECT (button), "clicked",
G_CALLBACK (hello), NULL);
/* Это закроет окно вызвав
* gtk_widget_destroy(window) когда поступит "clicked". Снова сигнал
* закрытия мог поступить от сюда, или от менеджера окон. */
g_signal_connect_swapped (G_OBJECT (button), "clicked",
G_CALLBACK (gtk_widget_destroy),
G_OBJECT (window));
/* Помещаем кнопку внутрь окна */
gtk_container_add (GTK_CONTAINER (window), button);
/* Последний этап, вывод кнопки на экран. */
gtk_widget_show (button);
/* Вывод на экран окна. */
gtk_widget_show (window);
/* Все GTK приложения содержат gtk_main(). Здесь заканчивается контроль
* и происходит ожидание(нажатие клавиши или мышки) */
gtk_main ();
return 0;
}
|
Introduction |
|
Compiling Hello World |