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

_images/progressbar_example.png
 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
import gi

gi.require_version("Gtk", "3.0")
from gi.repository import Gtk, GLib


class ProgressBarWindow(Gtk.Window):
    def __init__(self):
        super().__init__(title="ProgressBar Demo")
        self.set_border_width(10)

        vbox = Gtk.Box(orientation=Gtk.Orientation.VERTICAL, spacing=6)
        self.add(vbox)

        self.progressbar = Gtk.ProgressBar()
        vbox.pack_start(self.progressbar, True, True, 0)

        button = Gtk.CheckButton(label="Show text")
        button.connect("toggled", self.on_show_text_toggled)
        vbox.pack_start(button, True, True, 0)

        button = Gtk.CheckButton(label="Activity mode")
        button.connect("toggled", self.on_activity_mode_toggled)
        vbox.pack_start(button, True, True, 0)

        button = Gtk.CheckButton(label="Right to Left")
        button.connect("toggled", self.on_right_to_left_toggled)
        vbox.pack_start(button, True, True, 0)

        self.timeout_id = GLib.timeout_add(50, self.on_timeout, None)
        self.activity_mode = False

    def on_show_text_toggled(self, button):
        show_text = button.get_active()
        if show_text:
            text = "some text"
        else:
            text = None
        self.progressbar.set_text(text)
        self.progressbar.set_show_text(show_text)

    def on_activity_mode_toggled(self, button):
        self.activity_mode = button.get_active()
        if self.activity_mode:
            self.progressbar.pulse()
        else:
            self.progressbar.set_fraction(0.0)

    def on_right_to_left_toggled(self, button):
        value = button.get_active()
        self.progressbar.set_inverted(value)

    def on_timeout(self, user_data):
        """
        Update value on the progress bar
        """
        if self.activity_mode:
            self.progressbar.pulse()
        else:
            new_value = self.progressbar.get_fraction() + 0.01

            if new_value > 1:
                new_value = 0

            self.progressbar.set_fraction(new_value)

        # As this is a timeout function, return True so that it
        # continues to get called
        return True


win = ProgressBarWindow()
win.connect("destroy", Gtk.main_quit)
win.show_all()
Gtk.main()