Чекбоксы

Иерархия наследования

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' сигналов "снятие выделения" и "новое выделение".