Вход/Регистрация
Linux: Полное руководство
вернуться

Аллен Питер В.

Шрифт:

Конечно, значение локали у вас может быть другим. Эту функцию нужно вызвать ДО инициализации GTK+.

Рис. 23.2. Надпись

23.4. Виджиты

23.4.1. Рождение, смерть и состояния виджита

После создания виджита управление ресурсами и памятью, необходимыми ему, выполняется автоматически. Виджиты уничтожаются также автоматически — при разрушении главного окна. Но иногда бывает нужно самостоятельно уничтожить виджит. Сделать это можно с помощью функции:

void gtk_widget_destroy(GtkWidget *widget);

Эта функция объявлена в файле gtk/gtkwidget.h. При уничтожении виджита также уничтожаются все его дочерние виджиты.

Если вы освобождаете виджит из контейнера функцией:

void gtk_container_remove(GtkContainer *cont, GtkWidget *w);

то виджит также будет разрушен.

Иногда нужно переместить виджит из одного контейнера в другой без его уничтожения. Это можно сделать так (мы будем перемещать надпись):

gtk_widget_ref(GTK_WIDGET(label));

gtk_container_remove(GTK_CONTAINER(cont1), label);

gtk_container_add(GTK_CONTAINER(cont2), label);

«Спрятать» виджит можно с помощью функции

void gtk_widget_hide(GtkWidget *w);

Отобразить виджит снова поможет функция gtk_widget_show.

Виджит может находиться в одном из состояний:

♦ GTK_STATE_NORMAL — нормальное;

♦ GTK_STATE_ACTIVE — активное (например, нажата кнопка);

♦ GTK_STATE_PRELIGTH — над виджитом находится указатель мыши;

♦ GTK_STATE_SELECTED — виджит выбран (установлен фокус ввода);

♦ GTK_STATE_INSENSITIVE — виджит не реагирует на ввод (сигналы).

Определить состояние виджита можно так:

GTK_WIDGET(w)->state

или с помощью макроса:

GTK_WIDGET_STATE(wid)

описанного в файле gtk/gtkwidget.h.

Сделать виджит неактивным можно так:

gtk_widget_set_sensitive(widget, FALSE);

Если второй параметр функции gtk_widget_set_sensitive будет равен TRUE, виджит widget станет активным.

Чтобы наш виджит получил фокус ввода, нужно использовать функцию:

gtk_widget_grab_focus(widget);

23.4.2. Упаковка виджитов, поля ввода и кнопки

Для размещения (упаковки) виджита в окне используются контейнеры. Существуют два основных вида контейнеров. Первый вид в качестве прародителя использует объект класса GtkBin, а второй — объект класса GtkContainer. Контейнеры первого вида могут иметь только один дочерний виджит, поэтому они используются для создания специфических интерфейсов: одной кнопки, рамки, окна.

Контейнеры второго вида более функциональны — они могут иметь много дочерних виджитов. Чаще всего используются контейнеры:

♦ GtkHBox — позволяет размещать виджиты горизонтально;

♦ GtkVBox — используется для вертикального размещения виджитов;

♦ GtkFixed — позволяет размещать виджиты в фиксированных координатах;

♦ GtkTable — позволяет упаковывать виджиты в виде таблицы.

Наиболее удачным, на мой взгляд, является контейнер GtkTable, поэтому в этом параграфе мы рассмотрим именно его. GtkTable может с успехом заменить и горизонтальный, и вертикальный контейнеры — что нам стоит задать таблицу, состоящую или одной строки или одного столбца?

Кроме контейнера GtkTable, в этом параграфе будут рассмотрены:

♦ поля для ввода текста и обработка введенной информации;

♦ кнопки;

♦ файловый ввод/вывод.

Сейчас мы напишем небольшой конфигуратор, который будет вносить изменения в файл

/etc/resolv.conf
. Напомню вам формат этого файла:

domain firma.ru

nameserver 192.168.0.1

nameserver 192.168.0.2

Директива domain определяет наш домен, а две директивы nameserver — первый и второй DNS-серверы, соответственно. Наш конфигуратор не будет вносить изменения в настоящий файл

/etc/resolv.conf
— для этого нужны права суперпользователя. При желании можно будет потом скопировать файл
resolv.conf
, сгенерированный нашей программой, в каталог
/etc
.

На рисунке 23.2 изображена уже готовая программа. Работает она так. Когда пользователь введет что-нибудь в поле ввода и нажмет Enter, программа отобразит введенный им текст на консоли. Когда пользователь нажмет OK, введенная им информация будет еще раз выведена на консоль и записана в файл. При нажатии кнопки Quit программа завершит свою работу. Она должна также завершить работу при нажатии кнопки закрытия окна — в GTK программист сам определяет реакции на стандартные кнопки.

Рис. 23.3. Учебный конфигуратор

  • Читать дальше
  • 1
  • ...
  • 221
  • 222
  • 223
  • 224
  • 225
  • 226
  • 227
  • 228
  • 229
  • 230
  • 231
  • ...

Ебукер (ebooker) – онлайн-библиотека на русском языке. Книги доступны онлайн, без утомительной регистрации. Огромный выбор и удобный дизайн, позволяющий читать без проблем. Добавляйте сайт в закладки! Все произведения загружаются пользователями: если считаете, что ваши авторские права нарушены – используйте форму обратной связи.

Полезные ссылки

  • Моя полка

Контакты

  • chitat.ebooker@gmail.com

Подпишитесь на рассылку: