BarraProgresso

Receita: Barra de Progresso para Uso Geral

Essa barra de progresso é para uso geral como: Adicionar registros no gtk.treeview e/ou Adicionar colunas no reportlab.

Código para PyGTK

   1 #-*- encoding: utf8 -*-
   2 
   3 ##
   4 # Esse programa é livre, você pode distribuir e/ou modifica-lo sob os
   5 # termos da licença geral publica GNU publicada pela fundação de software
   6 # livre (Free Software Foundation),  contida na segunda versão da licença
   7 # ou (em sua opinião) outra versão mais recente.
   8 # Esse programa é distribuído na esperança de ser útil e satisfatório,
   9 # mas DESTITUÍDO DE QUALQUER GARANTIA, destituído igualmente da
  10 # COMPATIBILIDADE DE MÁQUINA ou CONVENIÊNCIA PARA PROPÓSITOS
  11 # PARTICULARES. Veja a licença geral publica GNU para opter mais detalhes.
  12 # http://www.gnu.org/copyleft/gpl.html
  13 ##
  14 
  15 ###############################################################################
  16 ## Nome do Arquivo: minhabarra
  17 ## Autor: Guedes, Maurilio<billguedes>
  18 ## Data da Criação: 26/07/2005
  19 ## Data da Modificação: 27/07/2005
  20 ## Finalidade: Mostrar uma barra de progresso
  21 ##
  22 ##
  23 ##
  24 ###############################################################################
  25 
  26 import pygtk
  27 pygtk.require('2.0')
  28 import gtk, gobject
  29 
  30 class BarraProgresso:
  31         '''Classe principal'''
  32 
  33         def __init__(self):
  34                 '''Incialização padrão'''
  35                 
  36                 self.texto= "";
  37                 self.registro= 1;
  38                 self.total_registro= 500;
  39                 
  40         def desenhar(self):
  41                 '''Desenha os widgets'''
  42                 
  43                 # Cria uma janela comum
  44 #               self.janela = gtk.Window()
  45 #               self.janela = gtk.Window(gtk.WINDOW_TOPLEVEL)
  46                 self.janela = gtk.Window(gtk.WINDOW_POPUP)
  47                 self.janela.set_resizable(False)
  48                 self.janela.connect("destroy", self.fechar_janela)
  49                 self.janela.set_title("Barra de Progresso")
  50                 self.janela.set_border_width(0)
  51                 self.janela.set_position(gtk.WIN_POS_CENTER)
  52 
  53                 # Cria uma caixa vertical
  54                 vbox = gtk.VBox(False, 5)
  55                 vbox.set_border_width(10)
  56                 self.janela.add(vbox)
  57 
  58                 # Cria uma barra de progresso
  59                 self.barra_progresso = gtk.ProgressBar()
  60                 vbox.pack_start(self.barra_progresso, False, False, 0)
  61                 
  62                 # Chamar o método desenhar_progresso a da 5 milisegundos
  63                 self.tempo = gobject.timeout_add(5, self.desenhar_progresso, self.barra_progresso)
  64 
  65                 # Cria uma separador
  66                 separador = gtk.HSeparator()
  67                 vbox.pack_start(separador, False, False, 0)
  68 
  69                 # Cria uma etiqueta
  70                 self.etiqueta= gtk.Label()
  71                 self.etiqueta.set_label(self.texto)
  72                 vbox.pack_start(self.etiqueta, False, False, 0)
  73                 
  74                 # Mostra todas os widgets adicionados na janela
  75                 self.janela.show_all()
  76                 
  77         def escrever_texto(self, widget= None):
  78                 '''Escreve o texto na etiqueta'''
  79                 
  80                 self.etiqueta.set_label(self.texto)
  81                 
  82         def desenhar_progresso(self, widget= None):
  83                 '''Desenha ou atualiza a barra de progressso'''
  84                 
  85                 self.escrever_texto()
  86                 
  87                 # Calculo flacionário para adequação da barra de progresso
  88                 valor= (float(self.registro) / self.total_registro)
  89                 
  90                  # Caso seja 1 ou maior (100%) feche a tela
  91                 if valor >= 1: self.fechar_janela()
  92                         
  93                 # Valor válido 0.0 à 1.0
  94                 self.barra_progresso.set_fraction(valor) 
  95                 
  96                  # Exibe a porcentagem
  97                 self.barra_progresso.set_text("%.2f%%" % (valor * 100))
  98                 return True
  99                 
 100         def fechar_janela(self, widget= None):
 101                 '''Fecha o aplicativo'''
 102                 
 103                 # Remove a função relativa ao tempo (Timer)
 104                 gobject.source_remove(self.tempo)
 105                 gtk.main_quit()

Exemplo de uso

   1 #-*- encoding: utf8 -*-
   2 
   3 ##
   4 # Esse programa é livre, você pode distribuir e/ou modifica-lo sob os
   5 # termos da licença geral publica GNU publicada pela fundação de software
   6 # livre (Free Software Foundation),  contida na segunda versão da licença
   7 # ou (em sua opinião) outra versão mais recente.
   8 # Esse programa é distribuído na esperança de ser útil e satisfatório,
   9 # mas DESTITUÍDO DE QUALQUER GARANTIA, destituído igualmente da
  10 # COMPATIBILIDADE DE MÁQUINA ou CONVENIÊNCIA PARA PROPÓSITOS
  11 # PARTICULARES. Veja a licença geral publica GNU para opter mais detalhes.
  12 # http://www.gnu.org/copyleft/gpl.html
  13 ##
  14 
  15 ###############################################################################
  16 ## Nome do Arquivo: teste.py
  17 ## Autor: Guedes, Maurilio<billguedes>
  18 ## Data da Criação: 26/07/2005
  19 ## Data da Modificação: 27/07/2005
  20 ## Finalidade: Testar o uso do arquivo minhabarra.py
  21 ##
  22 ##
  23 ##
  24 ###############################################################################
  25 
  26 import pygtk
  27 pygtk.require('2.0')
  28 import gtk
  29 import minhabarra
  30 
  31 class Principal:
  32         '''Classe principal'''
  33         
  34         def __init__(self):
  35                 '''Incialização padrão'''
  36                 
  37                 # Cria uma janela
  38                 janela= gtk.Window()
  39                 janela.connect("destroy", gtk.main_quit)
  40                 
  41                 # Cria um botão
  42                 botao= gtk.Button("Executar")
  43                 botao.connect("clicked", self.executar)
  44                 janela.add(botao)
  45                 
  46                 # Mostra todas os widgets adicionados na janela
  47                 janela.show_all()
  48                 
  49         def executar(self, widget= None):
  50                 '''Executa o código abaixo'''
  51                 
  52                 # Carrega a classe 'BarraProgresso'
  53                 barra= minhabarra.BarraProgresso()
  54                 barra.texto= "Começando o Processo..."
  55                 
  56                 # Muda a variável registro da classe 'BarraProgresso'
  57                 barra.registro= 0
  58                 
  59                 # Muda a variável total_registro da classe 'BarraProgresso'
  60                 barra.total_registro= 15000
  61                 
  62                 # Desenha os widgets da classe 'BarraProgresso'
  63                 barra.desenhar()
  64 
  65                 # Loop ilustrativo, mas poderia ser uma lista de clientes
  66                 for i in range(barra.total_registro):
  67                         
  68                         # Depuração do código
  69                         print "Estou no for imprimindo %s\n" % i
  70                         
  71                         # Mostra mais informação ao usuário
  72                         barra.texto= "Estou Processando o Cliente '%05d'" % barra.registro
  73                         
  74                         # Muda novamente a variavel registro, ou melhor, acrescenta +1 na variável
  75                         barra.registro+= 1
  76                         
  77                         # Pausa o processo e espera a execução do "Timer"
  78                         gtk.mainiteration()
  79                         
  80 # Chama a classe 'Principal'                    
  81 p= Principal()
  82 
  83 # Inicia o aplicativo
  84 gtk.main()

Barra de progresso no Console

A biblioteca utilizada para a barra de progresso no console é a progressbar criado por Nilton Volpato disponível em http://cheeseshop.python.org/pypi/progressbar/2.2

   1 from progressbar import *
   2 def example1():
   3     widgets = ['Test: ', Percentage(), ' ', Bar(marker=RotatingMarker()),' ', ETA(), ' ', FileTransferSpeed()]
   4     pbar = ProgressBar(widgets=widgets, maxval=20000000).start()
   5     for i in range(2000000):
   6         pbar.update(10*i+1)
   7     pbar.finish()
   8 example1()
   9 raw_input()

ou

   1 import sys
   2 
   3 def progress_bar(value, max, barsize):
   4    chars = int(value * barsize / float(max))
   5    percent = int((value / float(max)) * 100)
   6    sys.stdout.write("#" * chars)
   7    sys.stdout.write(" " * (barsize - chars + 2))
   8    if value >= max:
   9       sys.stdout.write("done. \n\n")
  10    else:
  11       sys.stdout.write("[%3i%%]\r" % (percent))
  12       sys.stdout.flush()
  13 
  14 import time
  15 print "processing..."
  16 for i in xrange(11):
  17    progress_bar(i, 10, 40)
  18    time.sleep(1)
  19 print "ok"
  20 raw_input()


Guedes, Maurilio <billguedes.python at terra.com.br>

Volta para CookBook.

BarraProgresso (editada pela última vez em 2008-09-26 14:05:58 por localhost)