Exercício Resolvido em PHP - GTK
 1 <?php
 2 class principal
 3 {
 4    //cria variáveis privadas
 5    private $janela, $progresso, $valor, $maximo;
 6    function __construct()
 7    {
 8       //cria o objeto janela
 9       $this->janela = new GtkWindow;
10 	  //adiciona um título a janela
11 	  $this->janela->set_title('Exemplo');
12 	  //redimensiona a janela
13 	  $this->janela->set_default_size(100,100);
14 	  $this->janela->set_border_width(20);
15 	  //centraliza a janela
16 	  $this->janela->set_position(Gtk::WIN_POS_CENTER);
17 	  //cria a barra de progresso
18 	  $this->progresso = new GtkProgressBar();
19 	  $this->progresso->set_fraction(0);
20 	  //define o texto da barra
21 	  $this->progresso->set_text('Aguarde...');
22 	  //ao fechar a janela chama a função fechar_janela
23 	  $this->janela->connect_simple('destroy',array($this,'fechar_janela'));
24       
25 	  //adiciona a janela o widget GtkProgressBar
26 	  $this->janela->add($this->progresso);
27 	  //exibe os componetes existentes na janela
28 	  $this->janela->show_all();	  
29    }
30    
31    //método verificaOpcao
32    function processaAlgo()
33    {
34       //define o valor máximo para o laço for
35       $this->maximo = 800000;
36 	  
37 	  //programa execução para daqui 1 décimo de segundo
38 	  Gtk::timeout_add(10, array($this, 'atualizaProgressBar'));
39 	  
40 	  //percorre o laço
41 	  for($this->valor=0; $this->valor<=$this->maximo; $this->valor ++)
42 	  {
43 	      //enquando existem eventos pendentes
44 		  while(gtk::events_pending())
45 		     //executa a interação principal
46 			 gtk::main_iteration();
47 	  }
48 	  //cria a janela de diálogo
49 	  $dialog = new GtkMessageDialog(null, Gtk::DIALOG_MODAL, Gtk::MESSAGE_INFO, 
50 	  Gtk::BUTTONS_OK, "Fim do processamento");
51 	  //exibe diálogo
52 	  $dialog->run();
53 	  $dialog->destroy();
54    }
55    
56    function atualizaProgressBar()
57    {
58       //obtém um índice variando de 0 a 1 apartir do for
59 	  $indice = round($this->valor/$this->maximo, 2);
60 	  
61 	  //converte o índice para um percentual
62 	  $percentual = (int) ($indice * 100);
63 	  //valor de parada
64 	  if($percentual<=100)
65 	  {
66 	     //atribui indice e label à barra de progresso
67 		 $this->progresso->set_fraction($indice);
68 		 $this->progresso->set_text($percentual. '%');
69 		 if($percentual !==100)
70 		    Gtk::timeout_add(100, array($this, 'atualizaProgressBar'));
71 	  }
72    }
73    
74    //método responsável pela finalização do programa
75    function fechar_janela()
76    {
77       //finaliza o programa
78       Gtk::main_quit();
79    }
80 }
81 //instancia o exemplo
82 $objeto = new principal;
83 $objeto->processaAlgo();
84 Gtk::main();
85 ?>