Il giorno mar, 16/04/2013 alle 13.32 +0200, Matteo Perini ha scritto: > 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 >
Scusa la domanda forse stupidissima, ma hai considerato l'idea di gestire il video con Gstreamer invece che ricostruirti tutto da una DrawingArea? > 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....? Sempre se ho capito il tuo problema, la soluzione a quanto sopra dovrebbe risolvere anche questo problema (sì, presumibilmente stai generando una tonnellata di eventi inutili). ciao Pietro _______________________________________________ Python mailing list Python@lists.python.it http://lists.python.it/mailman/listinfo/python