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