Ciao,
ho un piccolo problema con le gtk.DrawingArea().
Ho cercato on-line esempi di come usarle nel modo più opportuno ma ho il dubbio di sbagliare qualcosa.
Ho un paio di quesiti che vorrei porvi.
1
Attualmente ho una DrawingArea (DA) che mi visualizza il flusso video di una webcam. funziona tutto però il processo mi sembra alquanto esoso dal punto di vista delle risorse. Cerco di spiegarmi meglio... quando visualizzo il flusso video (circa 2 fps) i 2 core del processore vanno al 40% ma se stacco la webcam, il programma usa come frame un'immagine bianca (5-6 fps) e il carico va al 60%. L'aggiornamento della DA viene fatto dalla funzione draw() la quale genera un expose-event che richiama nuovamente draw().
Questo modo di agire è corretto?
C'è un modo per evitare l'aggiornamento continuo almeno quando devo visualizzare la schermata bianca? Ho provato a redirigere l'expose-event verso una funzione "inerte" ma non sembra funzionare:
self.da.connect('expose_event', self.do_null)

def do_null(self):
    pass

2
durante l'esecuzione del programma devo eseguire richiamare delle funzioni e per seguirne lo stato ho messo una barra di avanzamento.
Il problema è che la finestra non fa il refresh se non viene forzato con:
while gtk.events_pending():
    gtk.main_iteration()
e fin qui potrebbe essere tutto normale...
Il problema appare per via del fatto che sembra che gtk.events_pending() sia una lista mooolto lunga (forse main_iteration durante il refresh manda anche un expose_event della DA che crea altri gtk-Events) e quindi rallenta tutte le operazioni. Vorrei solo che la barra si aggiornasse al momento giusto senza rallentare tutto. Avevo pensato di filtrare, durante il while, gli eventi e di prendere in considerazione solo quelli che mi aggiornano la barra ma non sono riuscito....
Qualcuno ha qualche idea....?
Scusate ma programmo da poco con le gtk e ho qualche difficoltà.
Ciao a tutti e grazie
Matteo
_______________________________________________
Python mailing list
Python@lists.python.it
http://lists.python.it/mailman/listinfo/python

Rispondere a