En muchos casos de muchos sistemas vemos los spinners,loc cuales son un widget que giran o se hacen presentes hasta que son necesarios,por ejemplo en windows cuando esta una tarea ocupada vemos que el cursor se convierte en un spinner,luego en otros casos cuando necesitamos un dialogo mas preciso nos encontramos con las barras de progreso o progressbar en ingles,los barras de progreso nos muestran una información mas exacta en casos en los cuales los spinners no son suficientes,en este caso veremos como funcionan ambos widgets en Gtk3 + Python.
Spinner:
Para crear un spinner se usa el constructor Gtk.Spinner(),al cual le podemos pasar el parámetro active para que le digamos al constructor si queremos que comience en movimiento:
self.spinner = Gtk.Spinner(active=True) # Comienza en movimiento
self.spinner = Gtk.Spinner() # Comienza quieto
Las únicas dos funciones que tenemos en este widget es start y stop una para iniciar y otro para comenzar,vamos a crear una ventana de ejemplo para ver como funciona:
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 | # -*- coding: latin-1 -*- from gi.repository import Gtk, GObject class SpinnerEjemplo(Gtk.Window): def __init__(self): Gtk.Window.__init__(self, title="Spinner") self.set_border_width(5) self.connect("delete-event", Gtk.main_quit) self.vbox = Gtk.Box(spacing=5) self.button = Gtk.ToggleButton("Girar") self.button.connect("toggled", self.on_start) # Este boton manipula el spinner self.button.set_active(False) self.vbox.pack_start(self.button,True,False,10) self.spinner = Gtk.Spinner() # Creamos un spinner self.vbox.pack_start(self.spinner,True,False,10) self.add(self.vbox) self.show_all() def on_start(self, widget): if widget.get_active(): # widget es el boton si esta activo self.spinner.start() # Iniciamos el widget self.button.set_label("Detener") else: # Si no self.spinner.stop() # Lo detenemos self.button.set_label("Girar") myspinner = SpinnerEjemplo() Gtk.main() |
Como vemos es muy simple mostrar un spinner,en el caso del progressbar es un poco mas complicado pero a la vez esto nos da mas posibilidades de personalización y una mayor descripción de la situación:
ProgresBar:
Para crear un ProgressBar se usa el constructor Gtk.ProgressBar(),primero que nada vamos a crear un ejemplo sencillo:
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 | # -*- coding: latin-1 -*- from gi.repository import Gtk, GObject class SpinnerEjemplo(Gtk.Window): def __init__(self): Gtk.Window.__init__(self, title="Progressbar") self.set_border_width(5) self.connect("delete-event", Gtk.main_quit) self.vbox = Gtk.Box(spacing=5) self.button = Gtk.ToggleButton("Iniciar") self.button.connect("toggled", self.on_control) # Este boton manipula el spinner self.button.set_active(False) self.vbox.pack_start(self.button,True,False,10) self.progressbar = Gtk.ProgressBar() # Creamos un ProgressBar self.vbox.pack_start(self.progressbar,True,False,10) self.timeout_id = GObject.timeout_add(100, self.on_start, None) # Esta funcion es mantiene el ciclo de on_start # en milisegunos self.controller = False # Creamos un controlador self.add(self.vbox) self.show_all() def on_control(self,widget): self.controller = widget.get_active() # Cambiamos el valor del controlador al valor del boton if self.controller: self.button.set_label("Pausar") else: self.button.set_label("Continuar") def on_start(self, widget): # Esta funcion se ejecuta cada 100 milisegundos basado en el retorno de la misma if self.controller: # Si el controlador es True new_value = self.progressbar.get_fraction() + 0.01 # Añade una centecima if new_value > 1: # Si el valor es uno(completo) new_value = 0 # Reiniciamos a cero(vacio) self.progressbar.set_fraction(new_value) # Colocamos la fraccion return True myspinner = SpinnerEjemplo() Gtk.main() |
Como vemos,he usado una función de la clase de ProgressBar,las cuales es:
set_fraction(new_value) # new_value es un entero a punto flotante 0,por ejemplo:
0.99,0.10,0.01,etc # 1 es lleno
También tenemos otras mas:
pulse() # Esta función hace que sea indefinida la barra de progreso,ya que solo va de un lado a otro.
set_inverted(bool) # Esta función invierte la forma que se llena el progressbar si el parámetro pasado es True.
set_orientation(orientacion) # Esta función cambia la forma de la orientación,por defecto es horizontal,pero podemos cambiarla a vertical pasandole como parámetro Gtk.Orientation.VERTICAL.
set_show_text("Porcentaje") # Muestra el progreso de la barra en porcentaje.
set_text("Texto") # Coloca texto a la barra.
De momento eso es todo,en otra ocasión veremos las labels,menus,etc.
Agregado a Favoritos!
ResponderBorrarque tal!!!!tengo que dar gracias por mi y por los que van a llegar a ver este tutorial,como siempre muy bien explicado que al fin de cuentas es lo que mas importa a los que estamos empezando con Gtk3,gracias por tu tiempo y dedicacion.... desde ya esperamos los proximos tutoriales...
ResponderBorrar