пятница, 10 мая 2013 г.

Gtk+. Добавление элементов управления в окно


Изучение GTK+ мы продолжим с присвоения заголовка окну и добавления виджетов. За основу возьмем наш прошлый проект, в котором мы создали простое окно GTK+. 

1) Добавим в код нашего проекта строчку которой мы присвоим заголовок нашему окну. Эту строчку нужно поместить где-нибудь после window = gtk_window_new(GTK_WINDOW_TOPLEVEL):

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

2) Теперь разместим наше окно в центре рабочего стола. Для этого после строчки gtk_window_set_title (GTK_WINDOW (window), "Gtk_p2") мы разместим строчку:

gtk_window_set_position(GTK_WINDOW(window), GTK_WIN_POS_CENTER);

3) Теперь зададим размер окна, размер окна будет 200 на 200 пикселей. Для этого после строчки gtk_window_set_position(GTK_WINDOW(window), GTK_WIN_POS_CENTER) нужно добавить строчку:

gtk_window_set_default_size(GTK_WINDOW(window), 200, 200);

4) Следующей строчкой мы установим ширину границы нашего окна в 10 пикселей:

gtk_container_set_border_width (GTK_CONTAINER (window), 10);

разместите ее после строчки:

gtk_window_set_default_size(GTK_WINDOW(window), 200, 200);

5) Так как в главном окне программы мы разместим больше чем один виджет, то для позиционирования виджетов и установки их размеров нам необходимо воспользоваться контейнером в который мы и упакуем все элементы. В GTK+ существует большое число контейнеров в которые мы можем размещать наши виджеты. В нашей программе мы воспользуемся контейнером, который называется GtkGrid. Данный контейнер позволяет размещать виджеты в ряд или в колонку. Следующей строчкой мы создадим контейнер:

grid = gtk_grid_new();

где grid это указатель на наш контейнер — сетка, так что после определения указателя на наше окно GtkWidget *window = NULL, разместите определение GtkWidget *grid = NULL.
  
6) Чтобы упаковать контейнер в наше окно, то необходимо воспользоваться функцией:

gtk_container_add (GTK_CONTAINER (window), grid);
  
7) После строчки кода, где мы определили указатель на контейнер-сетку GtkWidget *grid = NULL, нам необходимо определить указатели на три виджета, которые мы в дальнейшем разместим в окне нашей программы.
  
1. Указатель на поле редактирования: GtkWidget *entry = NULL;
2. Указатель на кнопку: GtkWidget *button = NULL;
3. Указатель на метку: GtkWidget *label = NULL;

8) Далее нам необходимо создать объект поля редактирования и прикрепить его к нашему контейнеру — сетки, разместить его в параметрах сетки.

а) Создание поля редактирования: entry = gtk_entry_new();
б) Размещаем в сетке: gtk_grid_attach(GTK_GRID(grid), entry, 0, 0, 1, 1);

Тоже самое нужно сделать и для метки текста и для кнопки.

Метка текста:
а) Создание метки: label = gtk_label_new("Some text");
б) Размещаем в сетке: gtk_grid_attach(GTK_GRID(grid), label, 0, 1, 2, 1);

Кнопка:
а) Создание кнопки: button = gtk_button_new_with_label("Set text");
б) Размещаем в сетке: gtk_grid_attach(GTK_GRID(grid), button, 1, 0, 1, 1);

Функция gtk_grid_attach размещает виджет в контейнере — сетка. Сетка состоит из клеток. Каждый виджет в сетке может заполнить одну или несколько клеток по вертикали и по горизонтали.

9) Ну и последнее, так как в нашей программе не один виджет, а несколько, то для показа окна, со всеми виджетами в нем, нам необходимо заменить функцию gtk_widget_show(window); на gtk_widget_show_all(window);.

Теперь, давайте, соберем наш проект. Результатом нашей работы будет окно с размещенными на нем элементами управления (смотрите рисунок 1).

 
Рисунок 1. Окно с элементами управления

 
Ниже размещен весь код программы:
#include <gtk/gtk.h>

int main(int argc, char **argv) {

 GtkWidget *window = NULL; 
 GtkWidget *grid = NULL;
 GtkWidget *entry = NULL;
 GtkWidget *button = NULL;
 GtkWidget *label = NULL;

 
 gtk_init(&argc, &argv);
 
 window = gtk_window_new(GTK_WINDOW_TOPLEVEL);
 
 gtk_window_set_title (GTK_WINDOW (window), "Gtk_p2");
 
 gtk_window_set_position(GTK_WINDOW(window), GTK_WIN_POS_CENTER);
 
 gtk_window_set_default_size(GTK_WINDOW(window), 200, 200);
 
 gtk_container_set_border_width (GTK_CONTAINER (window), 10);
 
 g_signal_connect(window, 

                  "destroy",

                  G_CALLBACK(gtk_main_quit),

                  NULL);
 
 grid = gtk_grid_new();
 
 gtk_container_add (GTK_CONTAINER (window), grid);
 
 entry = gtk_entry_new();
 
 gtk_grid_attach(GTK_GRID(grid), entry, 0, 0, 1, 1);
 
 label = gtk_label_new("Some text");
 
 gtk_grid_attach(GTK_GRID(grid), label, 0, 1, 2, 1);
 
 button = gtk_button_new_with_label("Set text");
 
 gtk_grid_attach(GTK_GRID(grid), button, 1, 0, 1, 1);

 gtk_widget_show_all(window);
 
 gtk_main();
 
 return 0;
 
}


syntax highlighted by Code2HTML, v. 0.9.1

Комментариев нет:

Отправить комментарий