• Domingo 13 de Octubre de 2024, 03:45

Mostrar Mensajes

Esta sección te permite ver todos los posts escritos por este usuario. Ten en cuenta que sólo puedes ver los posts escritos en zonas a las que tienes acceso en este momento.


Temas - J'aranes

Páginas: [1]
1
Python / pyGtk y funciones que corren en segundo plano
« en: Sábado 14 de Mayo de 2011, 13:17 »
Muy buenas señores del código:

Este es mi primier mensaje. No sean muy duros conmigo...
Estos días me he propuesto aprender un poco de python y me ha gustado mucho.

OS PONGO EN SITUACIÓN:
Para practicar hice un script que, usando pyPdf hace lo siguiente:
- Convierte un archivo PDF en otro documento preparado para su encuadernación oldschool.
- El resultado es otro PDF con las páginas dispuestas dos a dos (2 pags. por cara) y reordenadas para su encuadernación en cuadernillos de X páginas.
- Los parámetros que se le pueden pasar al script, ademas del obligatorio "input path" son:
     - el número de páginas por cuadernillo (bookletFols)
     - las páginas en blanco que se desean al principio o al final (addStartPages, addEndPages)
     - la ruta al archivo resultado (outPath).

La función principal es esta: make_a_book (inPath, addStartPages, addEndPages, bookletFols, outPath)
El script está terminado y funciona a la perfección. He pensado en reutilizar su función principal para adaptarlo al entorno de ventanas y ya casi lo tengo terminado, pero...

...ME PONGO A TRASTEAR CON GTK:
El programita en GTK te permite hacer lo siguiente:
- Cargar el PDF origen (iniPath).
- Establecer el destino (outPath).
- Establecer mediante ajustes de escala las demás variables: (addStartPages, addEndPages, bookletFols).
- Calcula y muestra información acerca de cómo quedará configurado el documento final.

Una vez todo preparado, el boton ACEPTAR (btAceptar) llama a la función make_a_book con todo lo necesario y se crea el documento para encuadernar.

FUNCIONA? SI, hace lo que tiene que hacer.
FUNCIONA BIEN? NO. Además, le falta una barra de progreso.

EL PROBLEMA:
Cuando se crea el documento, la función make_a_book toma el control y la ventana se congela (no hay procesos paralelos).
Empecé a documentarme acerca de threads y tasks, per no me aclaro. Seguro que por aquí me podéis hechar una mano.

AL TEMA:
Código: Python
  1.  
  2. # me traigo la función principal, que está en el archivo make_a_book.py
  3. from make_a_book import make_a_book
  4.  
  5. class pdf2book_gtk:
  6.    
  7.     # funciones_auxiliares
  8.     # ...
  9.   
  10.     # aquí es donde llama el botón ACEPTAR
  11.     def procesa(self, widget):
  12.         # ...
  13.         # calculo y establezco los datos:
  14.         # iniPath, addStartPages, addEndPages, bookletFols, outPath
  15.         # ...
  16.        
  17.         # Creo el documento resultante
  18.         make_a_book (iniPath, addStartPages, addEndPages, bookletFols, outPath)
  19.        
  20.         # acaba
  21.         # muestra un diálogo de "OK, TODO CORRECTO"
  22.  
  23.     def __init__(self):
  24.         # la ventana
  25.         window = gtk.Window(gtk.WINDOW_TOPLEVEL)
  26.         # ...
  27.  
  28.         # los botones
  29.         self.btAceptar = gtk.Button("Aceptar")
  30.         # ...
  31.        
  32.         # CONECTO
  33.         self.btAceptar.connect("clicked", self.procesa)
  34.        
  35.         #...
  36.  
  37. def main():
  38.     gtk.main()
  39.  
  40. if __name__ == "__main__":
  41.     ook = pdf2book_gtk()
  42.     main()
  43.  
  44.  

Asi que:
¿Cómo creeis que sería la mejor forma para que la llamada del botón a make_a_book quedara en segundo plano y no se congelara la ventana?
¿Sería conveniente crear una clase bookMaker que se encargara del proceso?

¿He planteado bien mi problema? Soy novato tanto en la programación como en los foros.

salut!
J'Aranes

Páginas: [1]