Виджет кнопки позволяет пользователю осуществить нажатие для инициирования того или иного действия. Примерами таких действий могут быть удаление файла или проверка орфографии в текстовом файле.
Виджет кнопки создается с помощью следующего конструктора:
GtkWidget *button = gtk_button_new();
Альтернативный вариант конструктора предусматривает установку текста надписи на кнопке:
GtkWidget *button = gtk_button_new_with_label(text);
Текст надписи на кнопке может быть изменен в любой момент после создания виджета с помощью следующего метода:
gtk_button_set_label(GTK_BUTTON(button), text);
При этом текст надписи на кнопке может быть получен с помощью следующего метода:
gtk_button_get_label(GTK_BUTTON(button));
Мнемонические кнопки-ускорители позволяют использовать сочетание клавиши ALT и выбранной буквенной клавиши клавиатуры для активации созданной кнопки. Эти ускорители могут идентифироваться с помощью символов подчеркивания под выбранными буквами. Данный функционал может быть активирован и деактивирован в рамках виджета с помощью следующего метода:
gtk_button_set_use_underline(GTK_BUTTON(button), use_underline);
При использовании значения TRUE параметра use_underline будет подчеркиваться выбранная в качестве ускорителя буква.
По умолчанию виджеты кнопок имеют границы и выглядят выпуклыми. Это может быть изменено с помощью данного метода:
gtk_button_set_relief(GTK_BUTTON(button), relief);
Параметр relief должен принимать одно из следующих значений:
На кнопке может отображаться изображение с помощью следующего метода:
gtk_button_set_image(GTK_BUTTON(button), image);
В качестве параметра image следует использовать виджет изображения GtkImage.
Позиция изображения на кнопке может устанавливаться с помощью следующего метода:
gtk_button_set_image_position(GTK_BUTTON(button), position);
Параметр position может принимать одно из нескольких значений:
Обычно при нажатии виджет кнопки получает фокус ввода. В некоторых случаях такое поведение может оказаться нежелательным и может быть изменено с помощью следующего метода:
gtk_button_set_focus_on_click(GTK_BUTTON(button), focus_on_click)
При использовании значения FALSE параметра focus_on_click фокус ввода будет оставаться на предыдущем использованном виджете даже при нажатии на кнопку.
Чаще всего используются следующие сигналы виджета кнопки:
Сигнал "clicked" чаще всего используется и генерируется при нажатии и последующем отпускании кнопки мыши над виджетом. Сигнал "pressed" генерируется при нажатии кнопки мыши над виджетом, а сигнал "released" — при отпускании кнопки мыши над ним же. В подавляющем большинстве случаев вам не придется использовать каких-либо сигналов, кроме "clicked".
Это код простого приложения, создающего окно с виджетом кнопки:
Загрузить исходный код примера
Он может быть скомпилирован с помощью компилятора GCC путем исполнения следующей команды:
$ gcc button.c `pkg-config --libs --cflags gtk+-3.0` -o button
Также вы можете использовать компилятор CLang:
$ clang button.c `pkg-config --libs --cflags gtk+-3.0` -o button