GTK: Виджет кнопки (GtkButton)

Виджет кнопки позволяет пользователю осуществить нажатие для инициирования того или иного действия. Примерами таких действий могут быть удаление файла или проверка орфографии в текстовом файле.

Конструктор

Виджет кнопки создается с помощью следующего конструктора:

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_RELIEF_NORMAL — обычные границы
  • GTK_RELIEF_NONE — без границ

На кнопке может отображаться изображение с помощью следующего метода:

gtk_button_set_image(GTK_BUTTON(button), image);

В качестве параметра image следует использовать виджет изображения GtkImage.

Позиция изображения на кнопке может устанавливаться с помощью следующего метода:

gtk_button_set_image_position(GTK_BUTTON(button), position);

Параметр position может принимать одно из нескольких значений:

  • GTK_POS_LEFT — слева от надписи
  • GTK_POS_RIGHT — справа от надписи
  • GTK_POS_TOP — сверху над надписью
  • GTK_POS_BOTTOM — снизу под надписью

Обычно при нажатии виджет кнопки получает фокус ввода. В некоторых случаях такое поведение может оказаться нежелательным и может быть изменено с помощью следующего метода:

gtk_button_set_focus_on_click(GTK_BUTTON(button), focus_on_click)

При использовании значения FALSE параметра focus_on_click фокус ввода будет оставаться на предыдущем использованном виджете даже при нажатии на кнопку.

Сигналы

Чаще всего используются следующие сигналы виджета кнопки:

  • clicked
  • pressed
  • released

Сигнал "clicked" чаще всего используется и генерируется при нажатии и последующем отпускании кнопки мыши над виджетом. Сигнал "pressed" генерируется при нажатии кнопки мыши над виджетом, а сигнал "released" — при отпускании кнопки мыши над ним же. В подавляющем большинстве случаев вам не придется использовать каких-либо сигналов, кроме "clicked".

Пример

Это код простого приложения, создающего окно с виджетом кнопки:

  1. #include <gtk/gtk.h>
  2.  
  3. static void destroy(GtkWidget *widget, gpointer data)
  4. {
  5.     gtk_main_quit();
  6. }
  7.  
  8. static void button_clicked(GtkWidget *button, gpointer data)
  9. {
  10.     g_print("Кнопка нажатаn");
  11. }
  12.  
  13. int main(int argc, char *argv[])
  14. {
  15.     GtkWidget *window;
  16.     GtkWidget *button;
  17.    
  18.     gtk_init(&argc, &argv);
  19.    
  20.     window = gtk_window_new(GTK_WINDOW_TOPLEVEL);
  21.     g_signal_connect(window, "destroy", G_CALLBACK(destroy), NULL);
  22.    
  23.     button = gtk_button_new_with_label("Кнопка");
  24.     g_signal_connect(GTK_BUTTON(button), "clicked", G_CALLBACK(button_clicked), NULL);
  25.     gtk_container_set_border_width(GTK_CONTAINER(window), 10);
  26.     gtk_container_add(GTK_CONTAINER(window), button);
  27.    
  28.     gtk_widget_show_all(window);
  29.    
  30.     gtk_main();
  31.    
  32.     return 0;
  33. }

Button

Загрузить исходный код примера

Он может быть скомпилирован с помощью компилятора 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