Основы программирования в 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;
}
Когда вы выполните программу, то получите кнопку-счетчик, ограниченную диапазоном
Рис. 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. Случай из практики
Фантастика:
фэнтези
9.54
рейтинг книги
Пир стервятников
Фантастика:
фэнтези
5.00
рейтинг книги
"Фантастика 2025-112". Компиляция. Книги 1-30
Фантастика 2025. Компиляция
Фантастика:
фэнтези
боевая фантастика
попаданцы
5.00
рейтинг книги
Призрак страсти
Любовные романы:
любовно-фантастические романы
8.60
рейтинг книги
Неучтенный элемент. Том 8
8. Антимаг. Вне системы
Фантастика:
фэнтези
5.00
рейтинг книги
Скажи, что клянешься
Любовные романы:
современные любовные романы
эро литература
5.00
рейтинг книги
Золотой ворон
5. Все ради игры
Фантастика:
зарубежная фантастика
5.00
рейтинг книги
Неучтенный элемент. Том 6
6. Антимаг. Вне системы
Фантастика:
фэнтези
5.25
рейтинг книги
Собрание сочинений Джерома Клапки Джерома в одной книге
7. Абсолют
Проза:
классическая проза
5.00
рейтинг книги
Режим черной магии
Фантастика:
ужасы и мистика
5.00
рейтинг книги
Прохоровское побоище. Правда о Величайшем танковом сражении
Мифы Великой Отечественной
Документальная литература:
прочая документальная литература
5.00
рейтинг книги
Хроники Корума (сборник)
Шедевры фантастики
Фантастика:
фэнтези
героическая фантастика
5.60
рейтинг книги
Извращенная тайна
Любовные романы:
современные любовные романы
эро литература
5.00
рейтинг книги
От Второй мировой к холодной войне. Немыслимое
Научно-образовательная:
история
5.00