Динамическое обновление содержимого

14 views
Skip to first unread message

zloiia

unread,
Aug 12, 2009, 8:34:46 PM8/12/09
to Русское сообщество PHP-GTK
Вопрос такой... Каким образом можно динамически обновлять содержимое,
допустим Label ? Для примера выложу код, который написал для проверки

<?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();
$button = new GtkButton('_Кнопка', TRUE);
$vbox->pack_start($button, FALSE, FALSE);
$label=new GtkLabel();
$vbox->pack_start($label, FALSE, FALSE);


$button->connect_simple('clicked', 'test', $label);
$window->add($vbox);
$window->show_all();
Gtk::main();
function test($label)
{
for ($i=0; $i<=10; $i++)
{

$label->set_text($i);
sleep(1);
}
}
?>

по идее вроде как должно было обновляться содержимое $label каждую
секунду... однако графическое оформление просто останавливалось, и
потом показывалось только конечное значение

Shecspi

unread,
Aug 13, 2009, 1:56:42 AM8/13/09
to Русское сообщество PHP-GTK
Я не знаю, как правильно это объяснить, но PHP-GTK работает примерно
по следующему принципу: сначала выполняется PHP-код, а только потом
происходит отрисовка интерфейса. Для "динамического изменения"
необходимо применять Gtk::timeout_add(). Ваш код будет иметь примерно
следующий вид:

<?php

$i = 0;

$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();

$button = new GtkButton('_Кнопка', TRUE);

$button->connect_simple('clicked', 'test');
$vbox->pack_start($button, FALSE, FALSE);

$label=new GtkLabel();
$vbox->pack_start($label, FALSE, FALSE);

$window->add($vbox);
$window->show_all();
Gtk::main();

function test()
{
global $i, $id, $label;

$label->set_text($i);
$i++;
if ($i > 10)
{
Gtk::timeout_remove($id);
}
else
{
$id = Gtk::timeout_add(1000, 'test');
}
}

?>

Reply all
Reply to author
Forward
0 new messages