- GtkCheckButton(). Данный виджет представляет из себя флажок, справа от которого находится пояснительный текст.
За установку или снятие флажка отвечает сигнал 'toggled'. Замечю, что установка/снятие флажка происходит при щелчке не только непосредственно по самой кнопке, но и по тексту. Первым параметром этому классу передаётся текстовая строка, а вторым булевый параметр, определяющий обработку комбинации клавиш. По умолчанию он имеет значение TRUE.$check->connect('toggled', 'on_check');
Здесь используется два метода. Первый, как вы знаете, возвращает строку, расположенную справа от флажка. А второй, get_active(), возвращает TRUE в случае, если флажок установлен, иначе FALSE.
function on_check($check)
{
echo $check->get_label().' '.$check->get_active()."\n";
} - GtkRadioButton(). Этот виджет операционная система, как правило, отображает в виде кружка, имеющего в себе ещё один, более маленький, кружок. Он предназначен для выбора одного варианта из нескольких.
Здесь также смене активной кнопки соответствует сигнал 'toogled'.$radio1 = new GtkRadioButton(NULL, 'Радио-кнопка _1', TRUE);
Обратите внимание, на первый параметр, передаваемый классу GtkRadioButton(). Это так называемая "группа". Она предназначена для того, чтобы связать несколько радио-кнопок вместе, т.е. если одна кнопка из группы станет активной, то все остальные станут неактивными. Для первой кнопки группы передаётся NULL, а всем остальным - первая кнопка. Второй параметр - это текстовая строка, третий - комбинации клавиш.
$radio2 = new GtkRadioButton($radio1, 'Радио-кнопка _2', TRUE);
$radio3 = new GtkRadioButton($radio1, 'Радио-кнопка _3', TRUE);
$label = new GtkLabel('Выбрана "'. $radio1->get_label().'"');
$radio1->connect('toggled', 'on_radio', $label);
$radio2->connect('toggled', 'on_radio', $label);
$radio3->connect('toggled', 'on_radio', $label);
function on_radio($radio, $label)
{
echo $label->set_text('Выбрана "'.
$radio->get_label().'"');
}
Я добавил виджет GtkLabel() для того, чтобы показать, как можно "оживить" внешний вид программы. В него записывается название текущей активной кнопки с помощью метода set_text().
Полный код программы:
<?php
$window = new GtkWindow();
$window->set_size_request(200, -1);
$window->set_position(Gtk::WIN_POS_CENTER);
$window->connect_simple('destroy', array('Gtk', 'main_quit'));
$vbox = new GtkVBox();
/**
* Флажок.
*/
$check = new GtkCheckButton('_Флажок', TRUE);
$check->connect('toggled', 'on_check');
function on_check($check)
{
echo $check->get_label().' '.$check->get_active()."\n";
}
$vbox->pack_start(new GtkLabel(), FALSE, FALSE);
$vbox->pack_start($check, FALSE, FALSE);
/**
* Радио-кнопки.
*/
$radio1 = new GtkRadioButton(NULL, 'Радио-кнопка _1', TRUE);
$radio2 = new GtkRadioButton($radio1, 'Радио-кнопка _2', TRUE);
$radio3 = new GtkRadioButton($radio1, 'Радио-кнопка _3', TRUE);
$label = new GtkLabel('Выбрана "'.$radio1->get_label().'"');
$radio1->connect('toggled', 'on_radio', $label);
$radio2->connect('toggled', 'on_radio', $label);
$radio3->connect('toggled', 'on_radio', $label);
function on_radio($radio, $label)
{
echo $label->set_text('Выбрана "'.$radio->get_label().'"');
}
$vbox->pack_start(new GtkLabel(), FALSE, FALSE);
$vbox->pack_start($radio1, FALSE, FALSE);
$vbox->pack_start($radio2, FALSE, FALSE);
$vbox->pack_start($radio3, FALSE, FALSE);
$vbox->pack_start($label, FALSE, FALSE);
$vbox->pack_start(new GtkLabel(), FALSE, FALSE);
$window->add($vbox);
$window->show_all();
Gtk::main();
?>
2 комментария:
За какой надобностью в функции присутствует оператор echo?
function on_radio($radio, $label)
{
echo $label->set_text('Выбрана "'.$radio->get_label().'"');
}
Для наглядности (печати в консоль). На сколько я помню, метод set_text возвращает установленную строку, ее мы и печатаем.
Отправить комментарий