Ver Mensaje Individual
  #1 (permalink)  
Antiguo 01/07/2013, 06:57
maestrodenada
 
Fecha de Ingreso: abril-2007
Mensajes: 8
Antigüedad: 17 años, 7 meses
Puntos: 0
cambiar estado del puntero (pyGtk)

Buenas.

tengo un cuadro de diálogo para que el usuario introduzca un archivo .ods y leer los datos de éste, para pasarlo a una base de datos.

Utilizo una adaptación de la clase ODSReader de Marco Conti, http://www.marco83.com/work/wp-content/uploads/2011/11/odf-to-array.py, para leer la tabla.

Mi problema es que cuando le doy al botón aceptar, éste queda como pulsado, hasta que concluye la lectura, del archivo.

Me gustaría que al hacer click, se pusiera el cursor en modo espera (Watch) y al finalizar la tarea en modo normal, algo así:
Código Python:
Ver original
  1. def aceptar(self, widget):
  2.         self.cambiar_cursor (gtk.gdk.WATCH)
  3.         #self.widgets.queue_draw()
  4.         datos = self.leer_datos()
  5.  
  6.         self.cambiar_cursor(None)

He probado con este "cambiar_cursor", que he adaptado de un código que he encontrado en internet, ...
Código Python:
Ver original
  1. def cambiar_cursor (self, cursor):
  2.         gdk_win = gtk.gdk.Window(self.widgets.window,
  3.             gtk.gdk.screen_width(),
  4.             gtk.gdk.screen_height(),
  5.             gtk.gdk.WINDOW_CHILD,
  6.             0,
  7.             gtk.gdk.INPUT_ONLY)
  8.         if cursor:
  9.             gdk_cursor = gtk.gdk.Cursor(cursor)
  10.         else:
  11.             gdk_cursor = None
  12.         gdk_win.set_cursor(gdk_cursor)
  13.         gdk_win.show()


... PERO, el cursor se activa tras la lectura, el botón se mantiene pulsado durante bastante tiempo, he probado con queue_draw() -como aparece en el código: comentado-, pero tampoco.

Pienso que el problema está en la carga del archivo...
Código Python:
Ver original
  1. def leer_datos (self):
  2.         resultado = None
  3.         doc = ODSReader(self.filechooser.get_filename())
  4.         ...
... que es cuando se queda 'parada' la "gui"

Alguien sabe como hacer esto de forma más eficaz.

Gracias

Última edición por maestrodenada; 01/07/2013 a las 07:04