[Python] gtk e drawing area
Matteo Perini
perini.matteo a gmail.com
Mar 16 Apr 2013 13:32:05 CEST
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
Maggiori informazioni sulla lista
Python