Основы программирования в Linux
Шрифт:
GtkWidget * widget) {
GtkWidget *label = gtk_label_new(caption);
GtkWidget *hbox = gtk_hbox_new(TRUE, 4);
gtk_container_add(GTK_CONTAINER(hbox), label);
gtk_container_add(GTK_CONTAINER(hbox), widget);
gtk_container_add(box, hbox);
}
3.
print_active
— еще одна вспомогательная функция, которая выводит текущее состояние заданной кнопки-выключателя GtkToggleButton
button_clicked
, функции обратного вызова, связанной с сигналом clicked
кнопки OK. При каждом щелчке мышью этой кнопки вы получаете на экране отчет о состоянии кнопок:
void print_active(char * button_name, GtkToggleButton* button) {
gboolean active = gtk_toggle_button_get_active(button);
printf("%s is %s\n", button_name, active?"active":"not active");
}
void button_clicked(GtkWidget *button, gpointer data) {
print_active("Checkbutton", GTK_TOGGLE_BUTTON(checkbutton));
print_active("Togglebutton", GTK_TOGGLE_BUTTON(togglebutton));
print_active("Radiobutton1", GTK_TOGGLE_BUTTON(radiobutton1));
print_active("Radiobutton2", GTK_TOGGLE_BUTTON(radiobutton2));
printf("\n");
}
4. В функции
main
вы создаете виджеты кнопок, поочередно помещаете их в контейнер GtkVBox
, добавив пояснительные метки, и связываете сигнал обратного вызова с кнопкой OK:
gint main(gint argc, gchar *argv[]) {
GtkWidget* window;
GtkWidget *button;
GtkWidget *vbox;
gtk_init(&argc, &argv);
window = gtk_window_new(GTK_WINDOW_TOPLEVEL);
gtk_window_set_default_size(GTK_WINDOW(window), 200, 200);
g_signal_connect(GTK_OBJECT(window), "destroy",
GTK_SIGNAL_FUNC(closeApp), NULL);
button = gtk_button_new_with_label("Ok");
togglebutton = gtk_toggle_button_new_with_label("Toggle");
checkbutton = gtk_check_button_new;
radiobutton1 = gtk_radio_button_new(NULL);
radiobutton2 =
gtk_radio_button_new_from_widget(GTK_RADIO_BUTTON(radiobutton1));
vbox = gtk_vbox_new(TRUE, 4);
add_widget_with_label(GTK_CONTAINER(vbox), "ToggleButton:",
togglebutton);
add_widget_with_label(GTK_CONTAINER(vbox), "CheckButton:",
checkbutton);
add_widget_with_label(GTK_CONTAINER(vbox), "Radio 1:", radiobutton1);
add_widget_with_label(GTK_CONTAINER(vbox), "Radio 2:", radiobutton2);
add_widget_with_label(GTK_CONTAINER(vbox), "Button:", button);
g_signal_connect(GTK_OBJECT(button), "clicked",
GTK_SIGNAL_FUNC(button_clicked), NULL);
gtk_container_add(GTK_CONTAINER(window), vbox);
gtk_widget_show_all(window);
gtk_main;
return 0;
}
На
GtkButton
четырех часто применяемых типов. Рис. 16.10
Щелкните мышью кнопку OK, чтобы увидеть состояние разных кнопок.
Данная программа — простой пример использования кнопок
GtkButton
четырех типов — показывает, как можно считать состояние кнопки типа GtkToggleButton
, GtkCheckButton
и GtkRadioButton
с помощью единственной функции gtk_toggle_button_get_active
. Это одно из огромных преимуществ объектно-ориентированного подхода — поскольку вам не нужны отдельные функции get_active
для каждого типа кнопки, вы можете сократить требующийся программный код. GtkTreeView
К этому моменту мы рассмотрели несколько простых виджетов GTK+, но не все виджеты представляют собой однострочные инструменты для ввода или отображения. Сложность виджетов ничем не ограничивается, и
GtkTreeView
— яркий пример виджета, инкапсулирующего огромный объем функциональных возможностей.
GtkWidget
+---- GtkContainer
+---- GtkTreeView
GtkTreeView
— член семейства виджетов, новых для комплекта GTK+ 2, создающий представление данных в виде дерева или списка наподобие тех, которые вы можете встретить в электронной таблице или файловом менеджере. С помощью виджета GtkTreeView
можно создать сложные представления данных, смешивая текст, растровую графику и даже данные, вводимые с помощью виджетов GtkEntry
, и т.д. Самый быстрый способ испытания
GtkTreeView
— запуск приложения gtk-demo, которое поставляется вместе с GTK+. Демонстрационное приложение показывает возможности всех виджетов GTK+, включая GtkTreeView
(рис. 16.11). Рис. 16.11
Семейство
GtkTreeView
составляется из четырех компонентов:
GtkTreeView
— отображение дерева или списка;
GtkTreeViewColumn
— представление столбца списка или дерева;
Поделиться:
Популярные книги
Часовое имя
4. Часодеи
Детские:
детская фантастика
9.56
рейтинг книги
Ох уж этот Мин Джин Хо 4
4. Мин Джин Хо
Фантастика:
попаданцы
дорама
5.00
рейтинг книги
Аутсайдер
11. Сопряжение
Фантастика:
боевая фантастика
космическая фантастика
постапокалипсис
рпг
5.00
рейтинг книги
Вдова на выданье
Любовные романы:
любовно-фантастические романы
5.00
рейтинг книги
Блуждающие огни 2
2. Блуждающие огни
Фантастика:
боевая фантастика
космическая фантастика
попаданцы
альтернативная история
фэнтези
5.00
рейтинг книги
Кодекс Охотника. Книга VI
6. Кодекс Охотника
Фантастика:
фэнтези
попаданцы
аниме
5.00
рейтинг книги
Волк: лихие 90-е
1. Волков
Фантастика:
попаданцы
альтернативная история
5.00
рейтинг книги
Магия чистых душ
Любовные романы:
любовно-фантастические романы
5.40
рейтинг книги
Релокант. По следам Ушедшего
3. Релокант в другой мир
Фантастика:
фэнтези
попаданцы
рпг
5.00
рейтинг книги
(Не) Все могут короли
3. Венецианский купец
Фантастика:
попаданцы
альтернативная история
6.79
рейтинг книги
Изгой Проклятого Клана. Том 2
2. Изгой
Фантастика:
попаданцы
аниме
фэнтези
фантастика: прочее
5.00
рейтинг книги
(Бес) Предел
Любовные романы:
современные любовные романы
6.75
рейтинг книги
Отверженный VIII: Шапка Мономаха
8. Отверженный
Фантастика:
городское фэнтези
альтернативная история
аниме
5.00
рейтинг книги
Её (мой) ребенок
Любовные романы:
современные любовные романы
6.91