PHP GTK刷新GUI

时间:2016-08-04 00:12:46

标签: php events gtk iteration main

我一直在尝试使用php-gtk创建一个非常简单的PHP应用程序。该程序进行一些处理并输出该过程的状态。问题是应用程序在进程完成之前不会启动。 我读到行import React from 'react'; // import your helper! class Home extends React.Component { componentDidMount() { helper.get('/api/posts').then((data) => { this.setState({posts: data}) }); } render() { return ( <div className="welcome"> {this.state.posts.map((post, idx) => <PostItem post={post} key={"post " + idx} />)} </div> ) } } 允许主循环在处理时继续,但它对我不起作用。 这是代码:

while (Gtk::events_pending()) {Gtk::main_iteration();}

&GT?; 我尝试在代码上的任何地方放置该行,我不确定它为什么不起作用。 任何帮助将非常感激。提前谢谢!

(注意:<?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(); 函数只是为了模拟一些繁重的处理)

1 个答案:

答案 0 :(得分:0)

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