Читать книгу 📗 "Основы программирования в Linux - Мэтью Нейл"
API у виджета
GtkToggleButton<b>GtkWidget* gtk_toggle_button_new(void);</b><b>GtkWidget* gtk_toggle_button_new_with_label(const gchar* label);</b><b>gboolean gtk_toggle_button_get_active(GtkToggleButton *toggle_button);</b><b>void gtk_toggle_button_set_active(GtkToggleButton *toggle_button,</b><b> gboolean is_active);</b>Наиболее интересные функции —
gtk_toggle_button_get_activegtk_toggle_button_set_activeTRUEGtkToggleButtonGtkCheckButton
Кнопка-флажок
GtkCheckButtonGtkToggleButtonGtkToggleButtonGtkCheckButton<b>GtkWidget* gtk_check_button_new(void);</b><b>GtkWidget* gtk_check_button_new_with_label(const gchar *label);</b>GtkRadioButton
Эта кнопка немного отличается от предыдущих, т.к. может группироваться с другими кнопками того же типа. Переключатель (или радиокнопка)
GtkRadioButton<b>GtkWidget* gtk_radio_button_new(GSList *group);</b><b>GtkWidget* gtk_radio_button_new_from_widget(GtkRadioButton *group);</b><b>GtkWidget* gtk_radio_button_new_with_label(GSList *group, const gchar *label);</b><b>void gtk_radio_button_set_group(GtkRadioButton *radio_button, GSList *group);</b><b>GSList* gtk_radio_button_get_group(GtkRadioButton *radio_button);</b>Группа переключателей представлена в объекте-списке библиотеки GLib, названном
GSListGSListgtk_radio_button_newgtk_radio_button_get_groupgtk_radio_button_new_with_widgetGtkButtonУпражнение 16.6. , и
GtkCheckButtonGtkToggleButtonGtkRadioButtonВведите следующий текст в файл с именем 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. Далее определите вспомогательную функцию, которая упаковывает
GtkWidgetGtkLabelGtkHboxGtkHboxvoid add_widget_with_label(GtkContainer * box, gchar * caption, 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_activeGtkToggleButtonbutton_clickedclickedvoid print_active(char * button_name, GtkToggleButton* button) { gboolean active = gtk_toggle_button_get_active(button); printf("%s is %sn", 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. В функции
mainGtkVBoxgint main(gint argc, gchar *argv[]) { GtkWidget* window; GtkWidget *button;