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.