«
用PHP开发GUI(一个简单的例子)

时间:2008-5-31    作者:Deri    分类: 分享


   <p>  环境:W2k+php4.3.1+php/gtk0.5.2</p><p>  一个简单的记事本(只可以打开文件进行修改)</p><p>  <code><?php<br />set_time_limit (0);   &#160;// 设置运行时间<br />if (!class_exists ("gtk"))     &#160;// 判断是否有GTK模块<br />  if (strtoupper (substr ($_SERVER["OS"], 0, 3)) == "WIN")<br />    dl ("php_gtk.dll");<br />  else<br />    dl ("php_gtk.so");<br />$window = &new GtkWindow ();       // 建一个窗口<br />$window->set_uposition (100, 100);    // 窗口出现位置<br />$window->set_usize ((gdk::screen_width()-200), (gdk::screen_height()-150)); // 窗口大小<br />$window->set_title ("WINDOWS");    &#160;// 设置窗口标题<br />$window->connect_object ('destroy', array ('gtk', 'main_quit'));  &#160;// 注册窗口的事件<br />$vbox = &new GtkVBox ();     &#160;<br />$hbox = &new GtkHBox ();    &#160;<br />$window->add ($vbox);<br />$menuBar = &new GtkMenuBar ();       &#160;// 创建菜单<br />$vbox->pack_start ($menuBar, false, false, 0);<br />$file = &new GtkMenuItem ("File");<br />$menuBar->append ($file);<br />$fileMenu = &new GtkMenu ();<br />$open = &new GtkMenuItem ("Open");<br />$save = &new GtkMenuItem ("Save");<br />$line = &new GtkMenuItem ();<br />$line->set_sensitive (true);<br />$exit = &new GtkMenuItem ("Exit");<br />$fileMenu->append ($open);<br />$open->connect_object ('activate', 'showFileSelection');   &#160;<br />$fileMenu->append ($save);<br />$save->connect_object ('activate', 'saveFile');<br />$fileMenu->append ($line);<br />$fileMenu->append ($exit);<br />$exit->connect_object ('activate', array ('gtk', 'main_quit'));<br />$file->set_submenu ($fileMenu);<br />$scroll = &new GtkScrolledWindow ();<br />$scroll->set_border_width (8);<br />$scroll->set_policy (GTK_POLICY_AUTOMATIC, GTK_POLICY_AUTOMATIC);<br />$hbox->pack_start ($scroll, true, true, 0);<br />$vbox->pack_start ($hbox, true, true, 1);<br />$text = &new GtkText ();<br />$text->set_editable (true);<br />$text->set_word_wrap (true);<br />$scroll->add ($text);<br />function showFileSelection ()     &#160;// 文件选择函数<br />{<br />  $file = &new GtkFileSelection ("File Selection");<br />  $ok_button = $file->ok_button;<br />  $ok_button->connect ('clicked', 'openFile', $file);<br />  $ok_button->connect_object ('clicked', array ($file, 'destroy'));<br />  $cancel_button = $file->cancel_button;<br />  $cancel_button->connect_object ('clicked', array ($file, 'destroy'));<br />  $file->show ();<br />}<br />$filePath = null;<br />function openFile ($button, $f)     // 打开文件的函数<br />{<br />  GLOBAL $text, $save, $filePath;<br />  $filePath = $f->get_filename ();<br />  if (is_file ($filePath))<br />  {<br />    $fp = fopen ($filePath, 'r');<br />    while (!feof ($fp))<br />      $str .= fgets ($fp, 1024);<br />    $text->insert (null, null, null, $str);<br />    fclose ($fp);<br />    return $filePath;<br />  }<br />}<br />function saveFile ()        // 保存文件的函数<br />{<br />  GLOBAL $filePath, $text;<br />  if (is_file ($filePath))<br />  {<br />    $str = $text->get_chars (0, -1);<br />    $fp = fopen ($filePath, 'w');<br />    fwrite ($fp, $str);<br />    fclose ($fp);<br />  }<br />  return;<br />}<br />$window->show_all ();      &#160;// 显示窗体内的所有控件<br />gtk::main ();           // 最重要的一句,不可少的<br />?> </code></p>