Чтение онлайн

на главную - закладки

Жанры

Основы программирования в Linux
Шрифт:

GTK_SIGNAL_FUNC(closeApp), NULL);

 adjustment = gtk_adjustment_new(100.0, 50.0, 150.0, 0.5, 0.05, 0.05);

 spinbutton = gtk_spin_button_new(GTK_ADJUSTMENT(adjustment), 0.01, 2);

 gtk_container_add(GTK_CONTAINER(window), spinbutton);

 gtk_widget_show_all(window);

 gtk_main;

 return 0;

}

Когда вы выполните программу, то получите кнопку-счетчик, ограниченную диапазоном значений 50–150 (рис. 16.9).

Рис. 16.9 

GtkButton

Вы уже видели виджет кнопки

GtkButton
в действии, но существует несколько виджетов, потомков
GtkButton
, с чуть большими функциональными возможностями, заслуживающими упоминания.

GtkButton

 +----GtkToggleButton

+----GtkCheckButton

+----GtkRadioButton

Как видно из иерархии виджетов, кнопка-переключатель типа

GtkToggleButton
— прямой потомок кнопки
GtkButton
, кнопка-флажок
GtkCheckButton
— кнопки-выключателя
GtkToggleButton
и то же самое для переключателя
GtkRadioButton
, причем каждый дочерний виджет предназначен для определенных задач.

GtkToggleButton

Виджет

GtkToggleButton
идентичен виджету
GtkButton
за исключением одной важной детали:
GtkToggleButton
обладает состоянием. Это означает, что кнопка-выключатель может быть включена или выключена. Когда пользователь щелкает мышью виджет
GtkToggleButton
, последний стандартным способом порождает сигнал
clicked
и изменяет (или "переключает") свое состояние.

API у виджета

GtkToggleButton
очень простой:

GtkWidget* gtk_toggle_button_new(void);

GtkWidget* gtk_toggle_button_new_with_label(const gchar* label);

gboolean gtk_toggle_button_get_active(GtkToggleButton *toggle_button);

void gtk_toggle_button_set_active(GtkToggleButton *toggle_button,

 gboolean is_active);

Наиболее интересные функции —

gtk_toggle_button_get_active
и
gtk_toggle_button_set_active
, которые вы вызываете для чтения и установки состояния кнопки-выключателя. Если характеристика функционирования равна
TRUE
, это означает, что кнопка-выключатель
GtkToggleButton
включена.

GtkCheckButton

Кнопка-флажок

GtkCheckButton
— это замаскированная кнопка-выключатель
GtkToggleButton
. Вместо скучного прямоугольного отображения
GtkToggleButton
кнопка
GtkCheckButton
выводится как привлекательный флажок с расположенным рядом текстом. Функциональных различий между ними нет.

GtkWidget* gtk_check_button_new(void);

GtkWidget* gtk_check_button_new_with_label(const gchar *label);

GtkRadioButton

Эта кнопка немного отличается от предыдущих, т.к. может группироваться с другими кнопками того же типа. Переключатель (или радиокнопка)

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

GtkWidget* gtk_radio_button_new(GSList *group);

GtkWidget* gtk_radio_button_new_from_widget(GtkRadioButton *group);

GtkWidget* gtk_radio_button_new_with_label(GSList *group, const gchar *label);

void gtk_radio_button_set_group(GtkRadioButton *radio_button, GSList *group);

GSList* gtk_radio_button_get_group(GtkRadioButton *radio_button);

Группа переключателей представлена в объекте-списке библиотеки GLib, названном

GSList
. Для того чтобы объединить переключатели в группу, вы можете создать объект
GSList
и затем передать ему каждую кнопку с помощью функций
gtk_radio_button_new
и
gtk_radio_button_get_group
, есть и более легкий способ в виде функции
gtk_radio_button_new_with_widget
, которая включает в GSList существующую кнопку. Вы увидите ее в действии в упражнении 16.6, которое позволит вам опробовать разные кнопки
GtkButton
.

Упражнение 16.6.
GtkCheckButton
,
GtkToggleButton
и
GtkRadioButton

Введите следующий текст в файл с именем buttons.с.

1. Сначала объявите указатели на кнопки как глобальные переменные:

#include <gtk/gtk.h>

#include <stdio.h>

GtkWidget *togglebutton;

GtkWidget *checkbutton;

GtkWidget *radiobutton1, *radiobutton2;

void closeApp(GtkWidget *window, gpointer data) {

 gtk_main_quit;

}

2. Далее определите вспомогательную функцию, которая упаковывает

GtkWidget
и
GtkLabel
в контейнер
GtkHbox
и затем вставляет этот
GtkHbox
в заданный виджет- контейнер. Это поможет вам сократить повторяющийся программный код:

void add_widget_with_label(GtkContainer * box, gchar * caption,

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

Пипец Котенку! 2

Майерс Александр
2. РОС: Пипец Котенку!
Фантастика:
юмористическое фэнтези
попаданцы
аниме
5.00
рейтинг книги
Пипец Котенку! 2

Старый, но крепкий 2

Крынов Макс
2. Культивация без насилия
Фантастика:
рпг
уся
эпическая фантастика
5.00
рейтинг книги
Старый, но крепкий 2

Неудержимый. Книга XXXII

Боярский Андрей
32. Неудержимый
Фантастика:
аниме
фэнтези
фантастика: прочее
попаданцы
5.00
рейтинг книги
Неудержимый. Книга XXXII

Я снова князь. Книга XXIII

Дрейк Сириус
23. Дорогой барон!
Фантастика:
юмористическое фэнтези
аниме
попаданцы
5.00
рейтинг книги
Я снова князь. Книга XXIII

Тринадцатый VII

NikL
7. Видящий смерть
Фантастика:
фэнтези
попаданцы
аниме
5.00
рейтинг книги
Тринадцатый VII

Кодекс Охотника. Книга XXIV

Винокуров Юрий
24. Кодекс Охотника
Фантастика:
фэнтези
попаданцы
аниме
5.00
рейтинг книги
Кодекс Охотника. Книга XXIV

Воронцов. Перезагрузка. Книга 5

Тарасов Ник
5. Воронцов. Перезагрузка
Фантастика:
попаданцы
альтернативная история
фэнтези
фантастика: прочее
6.00
рейтинг книги
Воронцов. Перезагрузка. Книга 5

Моров. Том 1 и Том 2

Кощеев Владимир
1. Моров
Фантастика:
попаданцы
альтернативная история
аниме
5.00
рейтинг книги
Моров. Том 1 и Том 2

Дважды одаренный. Том IV

Тарс Элиан
4. Дважды одаренный
Фантастика:
городское фэнтези
альтернативная история
аниме
7.00
рейтинг книги
Дважды одаренный. Том IV

Черный дембель. Часть 1

Федин Андрей Анатольевич
1. Черный дембель
Фантастика:
попаданцы
альтернативная история
5.00
рейтинг книги
Черный дембель. Часть 1

Ярар. Начало

Грехов Тимофей
1. Ярар
Фантастика:
фэнтези
попаданцы
5.00
рейтинг книги
Ярар. Начало

Я граф. Книга XII

Дрейк Сириус
12. Дорогой барон!
Фантастика:
юмористическое фэнтези
попаданцы
аниме
5.00
рейтинг книги
Я граф. Книга XII

Новик

Ланцов Михаил Алексеевич
2. Помещик
Фантастика:
альтернативная история
6.67
рейтинг книги
Новик

Идеальный мир для Лекаря 10

Сапфир Олег
10. Лекарь
Фантастика:
юмористическое фэнтези
аниме
5.00
рейтинг книги
Идеальный мир для Лекаря 10