Cómo hacer funcionar un Gtk.spinner usando Pygobject (Python y Gtk)

Tras mucho tiempo buscando la solución, hoy la he encontrado en stack overflow.

Gtk.Spinner
El spinner en cuestión funcionando

Una solución simple es llamar constantemente a este código dentro de la función que queremos llevar a cabo.

while Gtk.events_pending():
    Gtk.main_iteration()

Esto a veces no es posible. Para hacerlo sin lo anterior, necesitamos usar elementos que la librería Gtk nos ofrece. La función clave que realiza esto es GObject.idle_add(callback,[args]). Aún así también necesitaremos usar elementos como los threads de python para llevar a cabo nuestro objetivo. Os dejo un ejemplo del código funcional.

# Initialize spinner
spinner.start()

def runthread():
    # FUNCION A LLEVAR A CABO: pensando()
    resultado = pensando(cerebro)
    # Función "mágica" de Gtk
    GObject.idle_add(finalizado,resultado)

def finalizado(resultado):
    # parar el spinner
    spinner.stop()
    # Join thread
    th.join()
    # Llamar al callback
    funcion_callbk(resultado)

# Call to threading
th = threading.Thread(target=runthread)
th.start()

La función callback (funcion_callback) va a ser la función que se ocupe de recibir el resultado proporcionado por la función cerebro. Este es el resultado final que deberíais tener dentro de vuestro código.

Además, a la hora de llamar a Gtk, deberemos añadir estas funciones para que estos cambios tengan efecto: GLib.threads_init() y GObject.threads_init(). Entre ellas deberemos colocar la función Gtk.main()

PD: Sí, esta ha sido la causa del retraso de la versión 0.3 de pimagizer.

Saludos 😉

0 0

Mis proyectos: Gnhoi

Hola. Hace tiempo que llevo queriendo hablar de esto. Este es mi desarrollo de una aplicación gráfica para linux. Probablemente no mucha gente (desgraciadamente) conozca nhopkg. Este proyecto es uno creado por Jaime Gil que pretende ser el instalador universal de linux; en vez de descargarte el código fuente, te descargas el archivo .nho compilado y los desarrolladores no se rompen la cabeza y crean un .deb, .rpm, un tarball etc…

Pero el problema es que desde que se construyó nhopkg, sólo existe una aplicación gráfica para manejarlo. Y siento decirlo, pero gambas (el lenguaje de nhopkg-fe) no me gusta, me parece lento. Por eso me puse a “investigar” y decidí meterme en el proyecto de un nuevo instalador de paquetes.

Dicho programa es Gnhoi, mi proyecto actual. Está construido en python y la interfaz en glade. El por qué de no hacerlo en C es porque no tenía ni idea de compilar nada. Python me parecía (y me parece) sencillo. Además, son script (ya había trabajado con PHP antes).

Bueno, el caso es que hace algunos meses me metí a desarrollarlo, pero me perdía entre tantas líneas de código desorganizado. En cuando tuve un poco de tiempo, me puse otra vez a ello. Lo empecé desde cero. Hoy es justo cuando he conseguido instalar definitivamente un paquete .nho (al fin y al cabo esa es su utilidad). En concreto esa versión es la 0.2.0.7 Alpha (perdón por tanto cero, creo que es demasiado inmadura).

El proyecto está en sourceforge: gnhoi.sf.net. Allí subo las versiones más serias del proyecto, pero si queréis trastear con algunas otras versiones, podéis verlas en mediafire.
Además también he creado varios logos, en formatos svg y png para nhopkg y gnhoi aquí.

En cuanto a la versión 0.2.0.7 alpha: Aparte de que ahora es capaz de instalar paquetes, es capaz de reconocer el archivo introducido por argumentos. Esto permite abrir el nho directamente desde cualquier aplicación.

1 0