[Python-es] Pedir confirmacion al usuario con pygtk

alfonso saavedra n4e03 en yahoo.es
Jue Feb 18 16:36:43 CET 2010


> ventana emergente con las opciones Si, Si a todo, No, No a todo y Cancelar.
> Pues bien, el programe se ejecuta pero sale la ventana cada vez que
> encuentra un archivo, o no sale, o me da un error, etc..

Uf, eso es muy vago. Necesitaríamos saber qué errores (texto exacto) salen en 
qué circunstancias. Una traza de error vale más que mil palabras.

> el código por comodidad lo colgué en pastebin http://pastebin.com/m17a1e4aa

Mucho código, difícilmente la gente se lo mirará. Dos opciones:

1) Simplificarlo al mínimo.
2) Como comentas, dar el glade (y todo lo necesario) para que la gente pueda 
ejecutarlo en sus máquinas sin más.

Como comentario obligado: función comp_file(); ese try/except de un bloque 
enorme de código con el simple objetivo de capturar el "fd = open(file, 'r')" es 
una mala idea, dale alguna vuelta.


-- http://www.arnau-sanchez.com

E echo una versión simplificada de la parte que me da problemas limitándome a mostrar la ventana que pide la confirmación.
Mas que error lo que pasa es que sigure recorriendo el bucle y muestra la ventana cada vez que existe el archivo y lo que quiero es que no continué hasta que se pulse algún botón o cierre la ventana (lo que se considerara un no)

#!/usr/bin/env python
# -*- coding: utf-8 -*-

import pygtk

import gtk
import gtk.glade
import sys
import time
import gobject
import re
import Image
import gettext
import os

class comp_file():
    def __init__(self):
        overwrite = 0 # Si vale 0 muestra la ventana, 1 se sobreescribe todo y 2 no se soobrescribe nada
        for file in sys.argv[1:]:
            # con esto comprobamos si existe el fichero
            try:
                open(file, 'r')
                # si es el caso comprobamos cual es el valor de overwrite
                if overwrite == 0:
                    # Si es 0 mostramos la ventana
                    comp_file = gtk.MessageDialog(parent=None, flags=0, type=gtk.MESSAGE_WARNING, buttons=gtk.BUTTONS_YES_NO, message_format="Error!!")
                    comp_file.format_secondary_text("The file " + file + " exists\n Overwrite??")
                    comp_file.add_buttons("Yes to all", 100, "No to all", 101, gtk.STOCK_CANCEL, gtk.RESPONSE_CANCEL)
                    comp_file.show()
                
                    def close(w, res):
                        if res == gtk.RESPONSE_NO:
                            pass
                            w.hide()
                        elif res == gtk.RESPONSE_YES:
                            print file
                            w.hide()
                        elif res == 100:
                            w.hide()
                            self.overwrite = 1
                        elif res == 101:
                            w.hide()
                            self.overwrite = 2
                        elif res == gtk.RESPONSE_CANCEL:
                            # Si se pulso cancelar se sale del bucle
                            quit()
                            w.hide()
                    comp_file.connect("response", close)
                
                elif overwrite == 1:
                    # Si overwrate vale 1 sobreescribimos todos los ficheros
                    print 'si a todo'
                    print file
                elif overwrite == 2:
                    # Si overwrate vale 2  no sobreescribimos los ficheros
                    print 'No a todo'
                    pass
                
            except:
                # si el fichero no existe se procede a escribir el fichero de salida
                print file + ' no existe'
                
        time.sleep(1.0)
            
if __name__ == "__main__":
    comp_file()
        
Gracias de antemano



      
------------ próxima parte ------------
Se ha borrado un adjunto en formato HTML...
URL: <http://mail.python.org/pipermail/python-es/attachments/20100218/22b81e34/attachment.html>


Más información sobre la lista de distribución Python-es