[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