19 июня 2009 г.

Базовые элементы интерфейса. Часть 3.

Базовые элементы интерфейса. Часть 1.
Базовые элементы интерфейса. Часть 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 выводит? У меня он не работает

Shecspi комментирует...

По идее, должен печатать в ту консоль, из которой была запущена программа.