Pygtk y Gtk.Dialog
Javier Pérez Pacheco
javielinux en gmail.com
Mar Jul 24 14:05:50 CEST 2007
jejeje
Bueno, yo lo he realizado con una clase, lo hemos mandado los dos a la vez
;-)
voy a mirar tu código, pero creo q es mas o menos lo mismo
gracias
2007/7/24, Arnau Sanchez <arnau en ehas.org>:
>
> Arnau Sanchez escribió:
>
> > No obstante, el otro día leyendo ese mismo FAQ encontré lo que parece la
> > mejor alternativa para estos casos, usar generadores:
> >
> > http://faq.pygtk.org/index.py?req=show&file=faq23.020.htp
>
> Me contesto: he hecho un pequeño programa de muestra con la idea del FAQ,
> y
> efectivamente, creo que los generadores son de largo la mejor solución
> (mantra:
> threads are evil). En el ejemplo que os paso no utilizo clases (las odio
> cordialmente), pero sería trivial hacerlo en OOP:
>
> #!/usr/bin/python
> import gobject
> import time
> import gtk
>
> def task(bar, ntasks, dialog):
> ntask = 0
> while ntask < ntasks:
> print "debug:", ntask
> time.sleep(0.1) # simula un trabajo pesado
> ntask += 1
> fraction = float(ntask)/ntasks
> bar.set_fraction(fraction)
> bar.set_text("%d%%"%int(100.0*fraction))
> yield True
> dialog.destroy()
> yield False
>
> def on_button_clicked(widget, entry):
> def _on_dialog_response(widget, response, tag):
> if response == gtk.RESPONSE_REJECT:
> gobject.source_remove(tag)
> widget.destroy()
> def _on_dialog_delete_event(widget, event, tag):
> gobject.source_remove(tag)
> buttons = (gtk.STOCK_CANCEL, gtk.RESPONSE_REJECT)
> bar = gtk.ProgressBar()
> dialog = gtk.Dialog(buttons=buttons, flags=gtk.DIALOG_MODAL)
> dialog.vbox.pack_start(bar, False, False)
> ntasks = int(entry.get_text())
> tag = gobject.idle_add(task(bar, ntasks, dialog).next)
> dialog.connect("response", _on_dialog_response, tag)
> dialog.connect("delete-event", _on_dialog_delete_event, tag)
> dialog.show_all()
>
> window = gtk.Window()
> box = gtk.HBox()
> entry = gtk.Entry()
> label = gtk.Label("Cantidad de trabajo")
> entry.set_text("50")
> button = gtk.Button("Pulsa para abrir una barra de progreso")
> for widget in label, entry, button:
> box.pack_start(widget)
> button.connect("clicked", on_button_clicked, entry)
> window.connect("delete-event", lambda w, e: gtk.main_quit())
> window.add(box)
> window.show_all()
> gtk.main()
>
>
> _______________________________________________
> 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