Pygtk y Gtk.Dialog
Javier Pérez Pacheco
javielinux en gmail.com
Mar Jul 24 14:03:50 CEST 2007
Parece que FUNCIONA. Aqui está la prueba que he realizado. Sin thread ni
nada, usando la forma que comenta Arnau, con generadores, o eso creo ;-)
He creado una clase MyProgressBar y sólo tenemos que llamarla. La cosa es
que la tarea está dentro de la clase (función do_task), pero creo que para
ver la idea vale
¿que os parece?
#!/usr/bin/env python
# -*- coding: latin-1 -*-
import gtk
import os
import string
import threading
import time
import gobject
class MyProgressBar():
def __init__(self):
pass
def do_task (self, data):
i = 0
while i<50:
print str(i)
i = i + 1
time.sleep(0.1)
self.pbar.pulse()
yield True
self.d.destroy()
yield False
def start (self, data):
self.d = gtk.Window(gtk.WINDOW_TOPLEVEL)
self.d.set_title("Proceso")
self.d.set_border_width(10)
self.pbar = gtk.ProgressBar()
self.d.add(self.pbar)
self.pbar.show()
self.d.show_all()
task = self.do_task("hola")
gobject.idle_add(task.next)
w = gtk.Window(gtk.WINDOW_TOPLEVEL)
w.set_title("Prueba de barra de progreso")
w.set_border_width(20)
w.connect("destroy", gtk.main_quit)
pb = MyProgressBar()
bAccept = gtk.Button("Aceptar", gtk.STOCK_OK)
bAccept.connect("clicked", pb.start)
w.add(bAccept)
w.show_all()
gtk.main()
El día 24/07/07, Juan José Rojo <jjrojoc en hotmail.com> escribió:
>
> Has probado a utilizar un gtk.Window con un evento que se ejecute nada mas
> crear la ventana en vez de un gtk.Dialog?
> Los dialogs por default solo responden a unas señales predeterminadas.
>
> El diálogo no corre hasta que le haces un .run(),
>
>
> >From: "Javier Pérez Pacheco" <javielinux en gmail.com>
> >Reply-To: La lista de python en castellano <python-es en aditel.org>
> >To: "La lista de python en castellano" <python-es en aditel.org>
> >Subject: Re: [Python-es] Pygtk y Gtk.Dialog
> >Date: Tue, 24 Jul 2007 12:16:22 +0200
> >
> >He realiazado bastante pruebas. Lo único que hago es lanzar el Thread
> antes
> >de empezar a realizar los comandos de linux (que debería de mostrar el
> >dialogo) y cerrarlo al final (que cierra el dialogo)
> >
> >La cosa es que la ventana sale sólo si pongo d.run() y tengo que darle a
> la
> >"X" para que empiece el proceso. Si pongo d.show() no sale la ventana
> >
> >Te pongo un programa de prueba a ver si puedes ver el fallo. Debe de
> salir
> >la ventana de dialogo mientras escribe los 50 números, y sólo sale si
> pongo
> >d.run()
> >
> >no se cual puede ser el problema al poner show()
> >
> >#!/usr/bin/env python
> ># -*- coding: latin-1 -*-
> >
> >import gtk
> >import os
> >import string
> >import threading
> >import time
> >import gobject
> >
> >class MyThread(threading.Thread):
> > def __init__(self):
> > super(MyThread, self).__init__()
> >
> > self.d = gtk.Dialog("Dialogo")
> > self.d.set_border_width(4)
> > self.d.set_modal(False)
> >
> > self.pbar = gtk.ProgressBar()
> >
> > self.d.vbox.pack_start(self.pbar, False, False, 0)
> >
> > self.pbar.show()
> >
> > self.d.show_all()
> >
> > #self.d.show()
> > self.d.run()
> >
> > self.quit = False
> >
> > def update(self):
> > self.pbar.pulse()
> > return False
> >
> >
> > def close(self):
> > self.quit = True
> > self.d.destroy()
> >
> > def run(self):
> > while not self.quit:
> > gobject.idle_add(self.update)
> >
> >t = MyThread()
> >t.start()
> >i = 0
> >while i<50:
> > print str(i)
> > i = i + 1
> > time.sleep(0.1)
> >
> >t.close()
> >
> >El día 24/07/07, Jesus Rodriguez <foxandxss en gmail.com> escribió:
> >>
> >>Hola, conozco tus scripts :P
> >>
> >>Sobre tu problema, a falta de ver el código completo, te aconsejaría que
> >>intentes ver de donde viene el problema. Yo normalmente en estos casos,
> >>suelo hacer pruebas en un fichero nuevo. En este caso podrias lanzar un
> >>Thread mientras lanzas algun proceso con fork donde uses imagemagick y
> ver
> >>si funciona bien para ir descartando fallos.
> >>
> >>Siento no ayudar mucho más, la clase del thread parece correcta, pero
> >>puede
> >>no estar ahi el fallo.
> >>
> >>
> >>Un saludo.
> >>_______________________________________________
> >>Python-es mailing list
> >>Python-es en aditel.org
> >>http://listas.aditel.org/listinfo/python-es
> >>
> >_______________________________________________
> >Python-es mailing list
> >Python-es en aditel.org
> >http://listas.aditel.org/listinfo/python-es
>
> _________________________________________________________________
> Un amor, una aventura, compañía para un viaje. Regístrate gratis en MSN
> Amor
> & Amistad. http://match.msn.es/match/mt.cfm?pg=channel&tcid=162349
>
> _______________________________________________
> Python-es mailing list
> Python-es en aditel.org
> http://listas.aditel.org/listinfo/python-es
>
Más información sobre la lista de distribución Python-es