Базовые элементы интерфейса. Часть 2.
Базовые элементы интерфейса. Часть 3.
Данной статьёй я завершаю рассказ о базовых элементах интерфейса, т.к. все они уже были перечислены.
- Регулятор вводимого значения GtkSpinButton. Он представляет из себя поле GtkEntry со стрелочками сбоку, предназначенными для изменения значения.
Для создания такого регулятора необходимо методу GtkSpinButton::new_with_range() передать минимальное значение, максимальное и шаг изменения. Эти значения могут иметь тип double и int. При изменении значения издаётся сигнал 'value-changed'. У пользователя также имеется возможность вручную ввести значение. Для его фиксирования необходимо нажать Enter. О безопасности за нас позаботится PHP-GTK, т.к. в поле возможен ввод только цифр и если введённое число не укладывается в указанный нами диапазон, то оно автоматически сбросится на максимальное/минимальное, в зависимости от ситуации.$spin = GtkSpinButton::new_with_range(0, 1, 0.1);
$spin->connect('value-changed', 'on_value_changed');
function on_value_changed($spin)
{
echo "Выбранное значение: ".$spin->get_value()."\n";
} - Раскрывающийся список GtkComboBox.
За создание данного виджета отвечает класс GtkComboBox, но при его непосредственном вызове у меня программа возвращает ошибку сегментации (Segmentation fault), поэтому пришлось несколько исхитриться и использовать GtkComboBox::new_text(). А далее всё просто. Для добавления нового элемента в список используется метод append_text(). Каждому добавляемому элементу присваивается персональный номер, отсчёт ведётся от нуля. Методом set_active() устанавливаем активный элемент (это будет "Второй"). При изменении выбора издаётся сигнал 'changed', обработав который, мы методом get_active_text() получаем содержимое активного элемента.$combo = GtkComboBox::new_text();
$combo->append_text('Первый');
$combo->append_text('Второй');
$combo->append_text('Третий');
$combo->set_active(1);
$combo->connect('changed', 'on_changed');
function on_changed($combo)
{
echo $combo->get_active_text()."\n";
}
Полный код программы:<?php
$window = new GtkWindow;
$window->set_size_request(300, -1);
$window->connect_simple('destroy', array('Gtk', 'main_quit'));
$vbox = new GtkVBox;
///// GtkSpinButton /////
$spin = GtkSpinButton::new_with_range(0, 1, 0.1);
$spin->connect('value-changed', 'on_value_changed');
function on_value_changed($spin)
{
echo "Выбранное значение: ".$spin->get_value()."\n";
}
///// GtkComboBox /////
$combo = GtkComboBox::new_text();
$combo->append_text('Первый');
$combo->append_text('Второй');
$combo->append_text('Третий');
$combo->set_active(1);
$combo->connect('changed', 'on_changed');
function on_changed($combo)
{
echo $combo->get_active_text()."\n";
}
//////////
$hbox = new GtkHBox;
$hbox->pack_start(new GtkLabel('Выберите значение'));
$hbox->pack_start($spin, FALSE, FALSE);
$vbox->pack_start(new GtkLabel(), FALSE, FALSE);
$vbox->pack_start($hbox);
$vbox->pack_start(new GtkLabel(), FALSE, FALSE);
$vbox->pack_start($combo, FALSE, TRUE);
$vbox->pack_start(new GtkLabel(), FALSE, FALSE);
$window->add($vbox);
$window->show_all();
Gtk::main()
?>
2 комментария:
Отличная статья!
Судя по мануалу, GtkComboBox::new_text() и есть корректный способ создания объекта GtkComboBox в случае, когда используется текстовая модель по умолчанию. Более того, отмечается, что методы append_text() , insert_text() , prepend_text() и remove_text() работают только для объектов, созданных именно таким образом, т.е. при помощи GtkComboBox::new_text()
Кстати, при работе с Glade объект с использованием GtkComboBox::new_text () создается если стоит галка Translatable и в XML появляется элемент
Только приходится вначале ввести некий текст, потом его удалить, чтобы эта опция стала активной, в моей версии Glade это так почему-то.
Смысл этого в том, что я хочу определять элементы не в Glade, а из кода (особенно когда элементы в списке могут изменяться), и теми же простыми методами:
$combo = $glade->get_widget('combobox1');
$combo->append_text('Первый');
$combo->append_text('Второй');
$combo->append_text('Третий');
Отправить комментарий