Python – Barra de progreso en GTK+ 3

ProgressBar se utiliza para mostrar el progreso de las operaciones de larga duración. El Gtk.ProgressBar se puede utilizar en dos modos diferentes: 

  • modo de porcentaje
  • Modo de actividad.

Cuando una aplicación puede determinar cuánto trabajo queda, podemos usar Gtk.ProgressBar en modo de porcentaje. En este modo, se requiere que la aplicación llame a Gtk.ProgressBar.set_fraction() periódicamente para actualizar la barra de progreso, pasando un valor flotante entre 0 y 1 para proporcionar el nuevo valor porcentual. 

Cuando una aplicación no puede determinar la cantidad de trabajo a realizar, puede usar el modo de actividad, que muestra la actividad mediante un bloque que se mueve hacia adelante y hacia atrás dentro del área de progreso. En este modo, se requiere que la aplicación llame a Gtk.ProgressBar.pulse() periódicamente para actualizar la barra de progreso. Podemos elegir el tamaño del paso, con el método Gtk.ProgressBar.set_pulse_step() . Por defecto, Gtk.ProgressBar es horizontal y de izquierda a derecha, pero puede cambiarlo a una barra de progreso vertical utilizando el método Gtk.ProgressBar.set_orientation() . Se puede cambiar la dirección en la que crece la barra de progreso usando Gtk.ProgressBar.set_inverted(). Gtk.ProgressBar también puede contener texto que se puede configurar llamando a Gtk.ProgressBar.set_text()y Gtk.ProgressBar.set_show_text() .

Ejemplo :

Python3

from gi.repository import Gtk, GLib
import gi
  
  
# Since a system can have multiple versions
# of GTK + installed, we want to make
# sure that we are importing GTK + 3.
gi.require_version("Gtk", "3.0")
  
class ProgressBarWindow(Gtk.Window):
    def __init__(self):
        Gtk.Window.__init__(self, title="ProgressBar Demo")
        self.set_border_width(10)
  
        vbox = Gtk.Box(orientation=Gtk.Orientation.HORIZONTAL, spacing=6)
        self.add(vbox)
          
        # Create a ProgressBar
        self.progressbar = Gtk.ProgressBar()
        vbox.pack_start(self.progressbar, True, True, 0)
          
        # Create CheckButton with labels "Show text",
        # "Activity mode", "Right to Left" respectively
        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 = "Geek For Geeks"
        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)
        return True
  
  
win = ProgressBarWindow()
win.connect("destroy", Gtk.main_quit)
win.show_all()
Gtk.main()

Producción :

Publicación traducida automáticamente

Artículo escrito por amalchandranmv y traducido por Barcelona Geeks. The original can be accessed here. Licence: CCBY-SA

Deja una respuesta

Tu dirección de correo electrónico no será publicada. Los campos obligatorios están marcados con *