GTK+: Виджет окна (GtkWindow)

Окно является базовым элементом любого приложения на основе GTK+. Это виджет, в который могут упаковываться другие виджеты. По этой причине данный виджет является контейнерным.

Без дополнительных виджетов в данный контейнерный виджет может быть упакован ровно один виджет.

Конструктор

Для создания виджета окна может использоваться следующий конструктор:

GtkWidget *window = gtk_window_new(type);

Параметр type может не использоваться при отсутствии необходимости в нем, но чаще всего с помощью него передается значение GTK_WINDOW_TOPLEVEL для создания обычных окон приложения.

Методы

Текст заголовка окна может задаваться с помощью следующего метода:

gtk_window_set_title(GTK_WINDOW(window), "Window");

По умолчанию GTK+ не отображает окно. Для отображения окна разработчику необходимо явно потребовать этого с помощью следующего метода:

gtk_widget_show(window);

При использовании данного метода будет отображено лишь само окно без упакованных в него виджетов, в отношении каждого из которых следует также вызвать этот метод.

Альтернативным методом является метод:

gtk_widget_show_all(window);

Примечание: рекомендуется использовать метод gtk_widget_show_all(window) сразу же после создания всех виджетов окна. Этот метод даже на медленных машинах гарантированно отобразит все виджеты одновременно, а не по мере их обработки.

Окна могут скрываться с помощью метода:

gtk_widget_hide(window);

Для программного закрытия окна может использоваться метод:

gtk_window_close(GTK_WINDOW(window));

Установка начальных ширины и высоты окна осуществляется с помощью следующего метода:

gtk_window_set_default_size(GTK_WINDOW(window), width, height);

В зависимости от принципа работы приложения состояние окна может меняться с помощью следующих методов:

gtk_window_maximize(GTK_WINDOW(window));
gtk_window_unmaximize(GTK_WINDOW(window));
gtk_window_fullscreen(GTK_WINDOW(window));
gtk_window_unfullscreen(GTK_WINDOW(window));

Для проверки факта разворота окна на весь экран может использоваться следующий метод:

gtk_window_is_maximized(GTK_WINDOW(window));

Для того, чтобы сделать окно дочерним окном другого окна предназначен следующий метод:

gtk_window_set_transient_for(GTK_WINDOW(window), parent);

Для установки иконки окна используются следующие методы:

gtk_window_set_icon(GTK_WINDOW(window), icon);
gtk_window_set_icon_from_file(GTK_WINDOW(window), filename);

Если окно является основным окном приложения, следующие методы позволят установить иконку как его, так и всех дочерних окон:

gtk_window_set_default_icon(GTK_WINDOW(window), icon);
gtk_window_set_default_icon_from_file(GTK_WINDOW(window), filename);

Пример

Это код простого приложения, создающего окно:

  1. #include <gtk/gtk.h>
  2.  
  3. static void destroy(GtkWidget *widget, gpointer data)
  4. {
  5.     gtk_main_quit();
  6. }
  7.  
  8. int main(int argc, char *argv[])
  9. {
  10.     gtk_init(&argc, &argv);
  11.    
  12.     GtkWidget *window = gtk_window_new(GTK_WINDOW_TOPLEVEL);
  13.     gtk_window_set_title(GTK_WINDOW(window), "Window");
  14.     g_signal_connect(window, "destroy", G_CALLBACK(destroy), NULL);
  15.    
  16.     gtk_widget_show_all(window);
  17.    
  18.     gtk_main();
  19.    
  20.     return 0;
  21. }

Window

Загрузить исходный код примера

Он может быть скомпилирован с помощью компилятора GCC путем исполнения следующей команды:

$ gcc window.c `pkg-config --libs --cflags gtk+-3.0` -o window

Также вы можете использовать компилятор CLang:

$ clang window.c `pkg-config --libs --cflags gtk+-3.0` -o window