PyGTK - Classe ProgressBar

Barras de progresso são usadas para dar ao usuário uma indicação visual de um processo de longa duração. O widget gtk.ProgressBar pode ser usado em dois modos - modo de porcentagem e modo de atividade.

Quando é possível estimar com precisão quanto do trabalho está pendente para ser concluído, a barra de progresso pode ser usada no modo de porcentagem e o usuário vê uma barra incremental mostrando a porcentagem do trabalho concluído. Se, por outro lado, a quantidade de trabalho a ser concluída pode ser determinada com precisão, a barra de progresso é usada no modo de atividade no qual, a barra mostra a atividade exibindo um bloco que se move para frente e para trás.

O construtor a seguir inicializa o widget da classe gtk.ProgressBar -

pb = gtk.ProgressBar()

gtk.ProgressBar usa os seguintes métodos para gerenciar a funcionalidade -

  • ProgressBar.pulse()- Isso desloca a barra de progresso para indicar que algum progresso foi feito, mas você não sabe quanto. Este método também muda o modo da barra de progresso para "modo de atividade", onde um bloco salta para frente e para trás.

  • ProgressBar.set_fraction(fraction) - Isso faz com que a barra de progresso "preencha" a parte da barra especificada por fraction. O valor defraction deve estar entre 0,0 e 1,0.

  • ProgressBar.set_pulse_setup() - Isso define a parte (especificada por fraction) do comprimento total da barra de progresso para mover o bloco de salto para cada chamada para o pulse() método.

  • ProgressBar.set_orientation()- Isso define a orientação da barra de progresso. Pode ser definido para uma das seguintes constantes:

    • gtk.PROGRESS_LEFT_TO_RIGHT

    • gtk.PROGRESS_RIGHT_TO_LEFT

    • gtk.PROGRESS_BOTTOM_TO_TOP

    • gtk.PROGRESS_TOP_TO_BOTTOM

No programa a seguir, o widget gtk.ProgressBar é usado no modo de atividade. Portanto, a posição inicial de progresso é definida como 0,0 peloset_fraction() método.

self.pb = gtk.ProgressBar()
self.pb.set_text("Progress")
self.pb.set_fraction(0.0)

Para incrementar o progresso em 1 por cento após 100 milissegundos, um objeto temporizador é declarado e uma função de retorno de chamada é configurada para ser chamada a cada 100 ms para que a barra de progresso seja atualizada.

self.timer = gobject.timeout_add (100, progress_timeout, self)

Aqui, progress_timeout()é a função de retorno de chamada. Ele incrementa o parâmetro doset_fraction() método em 1 por cento e atualiza a barra de texto em andamento para mostrar a porcentagem de conclusão.

def progress_timeout(pbobj):
   new_val = pbobj.pb.get_fraction() + 0.01
   pbobj.pb.set_fraction(new_val)
   pbobj.pb.set_text(str(new_val*100)+" % completed")
   return True

Exemplo

Observe o seguinte código -

import gtk, gobject
   
def progress_timeout(pbobj):
   new_val = pbobj.pb.get_fraction() + 0.01
   pbobj.pb.set_fraction(new_val)
   pbobj.pb.set_text(str(new_val*100)+" % completed")
   return True

class PyApp(gtk.Window):
   
   def __init__(self):
      super(PyApp, self).__init__()
      self.set_title("Progressbar demo")
      self.set_size_request(300,200)
      self.set_position(gtk.WIN_POS_CENTER)
		
      fix = gtk.Fixed()
      self.pb = gtk.ProgressBar()
      self.pb.set_text("Progress")
      self.pb.set_fraction(0.0)
		
      fix.put(self.pb,80,100)
      self.add(fix)
      self.timer = gobject.timeout_add (100, progress_timeout, self)
      self.connect("destroy", gtk.main_quit)
      self.show_all()
PyApp()
gtk.main()

O código acima irá gerar a seguinte saída -

Para usar a barra de progresso no modo de atividade, altere a função de retorno de chamada para o seguinte e execute -

def progress_timeout(pbobj):
   pbobj.pb.pulse()
   return True

O movimento para frente e para trás de um bloco dentro da barra de progresso mostrará o progresso da atividade.