11. ProgressBar
O Gtk.ProgressBar
é normalmente usado para exibir o progresso de uma operação longa. Ele fornece uma pista visual de que o processamento está em andamento. O Gtk.ProgressBar
pode ser usado em dois modos diferentes: modo de porcentagem e modo de atividade.
Quando um aplicativo pode determinar quanto trabalho precisa ocorrer (por exemplo, ler um número fixo de bytes de um arquivo) e monitorar seu progresso, ela pode usar Gtk.ProgressBar
no modo percentage e o usuário vê uma barra crescente indicando a porcentagem do trabalho que foi concluído. Neste modo, o aplicativo é necessário para chamar Gtk.ProgressBar.set_fraction()
periodicamente para atualizar a barra de progresso, passando um ponto flutuante entre 0 e 1 para fornecer o novo valor percentual.
Quando um aplicativo não tem uma maneira precisa de saber a quantidade de trabalho a ser feito, ele pode usar o modo de atividade, que mostra a atividade de um bloco se movendo para frente e para trás na área de progresso. Neste modo, o aplicativo é necessário para chamar Gtk.ProgressBar.pulse()
periodicamente para atualizar a barra de progresso. Você também pode escolher o tamanho do passo, com o método Gtk.ProgressBar.set_pulse_step()
.
Por padrão, Gtk.ProgressBar
é horizontal e da esquerda para a direita, mas você pode alterá-lo para uma barra de progresso vertical usando o método Gtk.ProgressBar.set_orientation()
. Mudar a direção da barra de progresso pode ser feito usando Gtk.ProgressBar.set_inverted()
. Gtk.ProgressBar
também pode conter texto que pode ser definido chamando Gtk.ProgressBar.set_text()
e Gtk.ProgressBar.set_show_text()
.
11.1. Exemplo
1import gi
2
3gi.require_version("Gtk", "3.0")
4from gi.repository import Gtk, GLib
5
6
7class ProgressBarWindow(Gtk.Window):
8 def __init__(self):
9 super().__init__(title="ProgressBar Demo")
10 self.set_border_width(10)
11
12 vbox = Gtk.Box(orientation=Gtk.Orientation.VERTICAL, spacing=6)
13 self.add(vbox)
14
15 self.progressbar = Gtk.ProgressBar()
16 vbox.pack_start(self.progressbar, True, True, 0)
17
18 button = Gtk.CheckButton(label="Show text")
19 button.connect("toggled", self.on_show_text_toggled)
20 vbox.pack_start(button, True, True, 0)
21
22 button = Gtk.CheckButton(label="Activity mode")
23 button.connect("toggled", self.on_activity_mode_toggled)
24 vbox.pack_start(button, True, True, 0)
25
26 button = Gtk.CheckButton(label="Right to Left")
27 button.connect("toggled", self.on_right_to_left_toggled)
28 vbox.pack_start(button, True, True, 0)
29
30 self.timeout_id = GLib.timeout_add(50, self.on_timeout, None)
31 self.activity_mode = False
32
33 def on_show_text_toggled(self, button):
34 show_text = button.get_active()
35 if show_text:
36 text = "some text"
37 else:
38 text = None
39 self.progressbar.set_text(text)
40 self.progressbar.set_show_text(show_text)
41
42 def on_activity_mode_toggled(self, button):
43 self.activity_mode = button.get_active()
44 if self.activity_mode:
45 self.progressbar.pulse()
46 else:
47 self.progressbar.set_fraction(0.0)
48
49 def on_right_to_left_toggled(self, button):
50 value = button.get_active()
51 self.progressbar.set_inverted(value)
52
53 def on_timeout(self, user_data):
54 """
55 Update value on the progress bar
56 """
57 if self.activity_mode:
58 self.progressbar.pulse()
59 else:
60 new_value = self.progressbar.get_fraction() + 0.01
61
62 if new_value > 1:
63 new_value = 0
64
65 self.progressbar.set_fraction(new_value)
66
67 # As this is a timeout function, return True so that it
68 # continues to get called
69 return True
70
71
72win = ProgressBarWindow()
73win.connect("destroy", Gtk.main_quit)
74win.show_all()
75Gtk.main()