Базовые элементы интерфейса. Часть 2.
Сегодня я расскажу ещё о двух виджетах.
- Первой будет кнопка с сохраняемым состоянием GtkToggleButton. При нажатии она остаётся в нажатом положении до тех пор, пока пользователь не нажмёт на неё второй раз.
За создание кнопки отвечает класс GtkToggleButton, которому в качестве параметра передаётся текст, помещаемый на кнопку. При нажатии на кнопку издаётся сигнал 'toggled'. Для того, чтобы кнопка по умолчанию была нажата, необходимо методу set_active() передать параметр TRUE.$button1 = new GtkToggleButton('Кнопка _1');
$button1->connect('toggled', 'on_toggled');
$button2 = new GtkToggleButton('Кнопка _2');
$button2->set_active(TRUE);
$button2->connect('toggled', 'on_toggled');
function on_toggled($button)
{
if ($button->get_active())
echo $button->get_label()." - active\n";
else
echo $button->get_label()." - not active\n";
} - Горизонтальный слайдер GtkHScale (также существует вертикальный - GtkVSpace. Принципы работы с ним аналогичные).
Для того, чтобы создать такой слайдер, необходимо методу GtkHScale::new_with_range() передать минимальное значение, максимальное и шаг. При изменении положения бегунка издаётся сигнал 'format-value' и вызывается функция on_format_value() которая ничего не делает, только возвращает $value обратно для того, чтобы это значение автоматически установилось сверху бегунка.$scale = GtkHScale::new_with_range(0, 100, 1);
$scale->connect('format-value', 'on_format_value');
function on_format_value($scale, $value)
{
return $value;
}
Полный код программы:
<?php
$window = new GtkWindow;
$window->set_size_request(300, -1);
$window->connect_simple('destroy', array('Gtk', 'main_quit'));
$vbox = new GtkVBox;
///// GtkToggleButton /////
$button1 = new GtkToggleButton('Кнопка _1');
$button1->connect('toggled', 'on_toggled');
$button2 = new GtkToggleButton('Кнопка _2');
$button2->set_active(TRUE);
$button2->connect('toggled', 'on_toggled');
function on_toggled($button)
{
if ($button->get_active())
echo $button->get_label()." - active\n";
else
echo $button->get_label()." - not active\n";
}
///// GtkHScale /////
$scale = GtkHScale::new_with_range(0, 100, 1);
$scale->connect('format-value', 'on_format_value');
function on_format_value($scale, $value)
{
return $value;
}
//////////
$vbox->pack_start(new GtkLabel, FALSE, FALSE);
$vbox->pack_start($button1, FALSE, TRUE);
$vbox->pack_start($button2, FALSE, TRUE);
$vbox->pack_start(new GtkLabel, FALSE, FALSE);
$vbox->pack_start($scale, FALSE, TRUE);
$vbox->pack_start(new GtkLabel, FALSE, FALSE);
$window->add($vbox);
$window->show_all();
Gtk::main();
?>
2 комментария:
Куда оператор echo выводит? У меня он не работает
По идее, должен печатать в ту консоль, из которой была запущена программа.
Отправить комментарий