PHP GTK 刷新 GUI

PHP GTK refreshing GUI

我一直在尝试使用 php-gtk 制作一个非常简单的 PHP 应用程序。该程序进行一些处理并输出该进程的状态。问题是应用程序在进程完成之前不会启动。 我读到 while (Gtk::events_pending()) {Gtk::main_iteration();} 行允许主循环在处理时继续,但它对我不起作用。 这是代码:

<?php
if(!class_exists('gtk')){
    exit('php-gtk2!!');
}

$wnd = new GtkWindow();
$wnd->set_size_request(400, 200);
$wnd->set_title('test');
$wnd->connect_simple('destroy', array('gtk', 'main_quit'));

$lbl = new GtkLabel('1/3');

function processing($lbl){
    while (Gtk::events_pending()) {Gtk::main_iteration();}
    sleep(2);
    $lbl->set_text('2/3');
    sleep(2);
    $lbl->set_text('3/3');
}

processing($lbl);

$wnd->add($lbl);
$wnd->show_all();
Gtk::main();

?> 我尝试将该行放在代码的任何位置,但我不确定为什么它不起作用。 任何帮助将非常感激。提前致谢!

(注:sleep函数只是为了模拟一些繁重的处理)

由于您试图在 GUI 运行 的同时工作,因此您将需要使用第二个线程,从该线程与 GUI 线程通信以获取 GUI 更新。为此,请使用 gdk_threads_add_idle()g_idle_add() 函数。 不要直接从其他线程调用 GTK+ 函数!