Иерархия наследования
Object
+--- Widget
+--- Container
+--- Bin
+--- Button
+--- ToggleButton
+--- CheckButton
Чекбоксы наследуют свойства и функции тоггля, но с небольшим различием. В случае чекбокса название располагается рядом с полем для галочки(или круглой кнопки и т.д. - зависит от темы оконного менеджера). Создание чекбокса происходит как обычно:
new Gtk::CheckButton();
new Gtk::CheckButton( $label );
Соответственно первая строка - просто чекбокс, вторая - чекбокс с лейблом. Обработка евентов оналогичо тогглям.
Радиокнопки
Object
+--- Widget
+--- Container
+--- Bin
+--- Button
+--- ToggleButton
+--- CheckButton
+--- RadioButton
поведение радиокнопок аналогично их поведению при использовании html и удобно, когда необходимо выбрать что-то из очень короткого списка позиций.
Создать группу радиокнопок можно при помощи следующих строк:
new Gtk::RadioButton( $label );
new Gtk::RadioButton( $label, $button );
Видно, что второй способ создания радиокнопки имеет дополнительный параметр $button, который позволяет группировать кнопки относительно начальной кнопки. Следующий пример более четко поясняет эту концепцию группировки(связывания нескольких радиокнопок):
#создаем первую кнопку и добавляем её в бокс
$radio1 = new Gtk::RadioButton( "button 1" );
$box->add( $radio1 );
# создаем вторую кнопку и добавляем её в бокс(к первой )
$radio2 = new Gtk::RadioButton( "button 2", $radio1 );
$box->add( $radio2 );
# создаем третью кнопку и добавляем её в бокс
# и связываем её со второй кнопкой
$radio3 = new Gtk::RadioButton( "button 3", $radio1 );
$box->add( $radio3 );
# создаем 4-ю кнопку, и связываем её с третьей
$radio4 = new Gtk::RadioButton( "button 4", $radio3 );
$box->add( $radio4 );
Если необходимо выделять по дефолту какую-то из кнопок из группы, то это делается строчкой
$togglebutton-> set_active ($state);
Действие аналогично действию тогглов, В группе радиокнопок только одна может быть активной. Когда происходит смена выделения радиокнопки, то происходит испускание двух 'toggled' сигналов "снятие выделения" и "новое выделение".