clave-GUI

Cesar Cardenas Desales cescd en yahoo.com.mx
Lun Mayo 22 19:26:51 CEST 2006


Debes hacer que tu programa sea ejecutado no por el
archivo python, sino por pythonw (interprete sin
consola). Esto se logra de dos maneras:

a) 
#!/usr/bin/env pythonw


b) Renombrar tu archivo poniendole extension *.pyw en
vez de *.py


 --- Tny <a.porrua en gmail.com> escribió:

> ya hice una gui (cutre eso sí), pero...
> ¿Cómo hago para que no aparezca la consola de dos?
> 
> gracias
> > # -*- coding: cp850 -*-
> #!/usr/bin/env python
> #algoritmo para la clave segura
> 
> import sys
> import random
> from Tkinter import *
> #Random s¢lo se emplea para generar la copia no
> compatible
> 
> 
> def caracteres():
>     "Devuelve una lista con los caracteres."
>     "el orden de esta lista es lo que
> incompatibiliza unas copias de otras"
>     return ['0', '1', '2', '3', '4', '5', '6', '7',
> '8', '9', 'A', 'B', 'C', 'D', 'E', 'F', 'G', 'H',
> 'I', 'J', 'K', 'L', 'M', 'N', 'O', 'P', 'Q', 'R',
> 'S', 'T', 'U', 'V', 'W', 'X', 'Y', 'Z', 'a', 'b',
> 'c', 'd', 'e', 'f', 'g', 'h', 'i', 'j', 'k', 'l',
> 'm', 'n', 'o', 'p', 'q', 'r', 's', 't', 'u', 'v',
> 'w', 'x', 'y', 'z']
> 
> 
> 
> #Esta funci¢n puede ser sustituida por cualquier
> otra que genere un n£mero a partir de una cadena de
> texto
> #Al sustir esta funci¢n se obtiene una versi¢n
> personal incompatible con el resto de versiones
> #Es imprescindible que siempre devuelve el mismo
> n£mero para la misma cadena de texto
> #Es recomendable que devuelva n£meros grandes
> #No es necesario que sea biyectiva, es decir un
> mismo n£mero puede ser generado por cadenas
> diferentes
> #Se recomienda que sea una funci¢n r pida
> def md(texto):
>     "Transforma una cadena de texto en un n£mero."
>     r=len(texto)
>     for i in texto:
>         x=ord(i)
>         r=(r*(x-1))^2-1
>     return r
> 
> #Esta funci¢n puede ser modificada
> def reordenar(caracteres, orden):
>     "altera el orden de los caracteres seg£n un
> n£mero"
>     i=len(caracteres)           
>     nuevos=[]
>     while i!=0:
>         x=orden % i                     #se puede
> modificar siempre que se mantenga x entre 0 e i-1
>         nuevos.append(caracteres[x])    
>         del caracteres[x]               #lo
> eliminamos de la lista de caracteres
>         orden=orden/(i+1)               #se puede
> modificar, no se recomienda emplear el producto pues
> f cilmente hace que ord%i=0  
>         i=i-1
>     return nuevos
> 
> #Su puede hacer de modo m s eficiente, creo que hay
> una funci¢n para hacer esto mismo
> def intercambiar(c1,c2,texto):
>     "intercambia los caracteres de texto, de la
> lista de caracteres c1 a la lista c2)"
>     txt=""
>     for i in texto:       
>         txt=txt + c2[c1.index(i)]
>     return txt
> 
> 
> 
> #seg£n el valor que de md() a sitio,usuario y clave
> se reordenan los caracteres
> #sitio usuario y clave se modifican seg£n estos
> caracteres reordenados
> #se dan tantas vueltas como se indique (con una
> vuelta deber¡a bastar, pero no esta de m s hacer
> unas cuantas)
> #para cada letra de la clave segura se repite todo
> el proceso con los nuevos sitio, usuario, clave y
> caracteres
> def generar(sitio, usuario, clave, vueltas):
>     "genera una clave segura"
>     c=caracteres()   
>     sitio=limitar(sitio,c) 
>     usuario=limitar(usuario,c)
>     clave=limitar(clave,c)
>     txt=""
>     for x in range(0,len(clave)):
>         for i in range(0,vueltas):
>             c=reordenar(c,md(sitio+usuario))
>             sitio=intercambiar(caracteres(),c,sitio)
>            
> usuario=intercambiar(c,caracteres(),sitio)
>         for i in range(0,vueltas):              
>             c=reordenar(c,md(clave))            
>             clave=intercambiar(caracteres(),c,clave)
>         txt=txt+c[caracteres().index(clave[x])]
>     return txt
>    
> 
> def limitar(texto,caracteres):
>     "Elimina los caracteres que no aparecen en la
> lista."
>     txt=""
>     for i in texto:
>         if caracteres.count(i)==1:
>             txt=txt+i
>     return txt
>     
> 
>     
> 
> #copia unica
> #Automatiza el proceso de generar copias
> personalizadas
> #Lo que hace es modificar el orden de los
> caracteres.
> #para que funcione, los primeros corchetes del
> archivo deben ser los de la funci¢n caracteres()
> #si por alg£n motivo hay que introducir alg£n
> corchete ant‚s, se deber¡a tambi‚n modificar esta
> funci¢n para que sigua funcionando
> def reproducir():
>     "genera una copia incompatible"
>     o=open(sys.argv[0],'r')     
>     original=o.read()
>     o.close()
>     a=original.index("[")+1     
>     z=original.index("]")        
>     final=original[:a]          
>     c=caracteres()              
>     random.shuffle(c)           
>     for i in range(0,len(c)-1):     
>         final=final+"'"+c[i]+"', "   
>     final=final+"'"+c[i+1]+"'"  
>     final=final + original[z:]  
>     o=open(sys.argv[0]+".copia.py","w")
>     o.write(final)
>     o.close()                   
> 
> #GUI  1.0
> 
> def GUIgenerar():
>     sitiotxt=sitio.get()
>     usuariotxt=usuario.get()
>     clavetxt=clave.get()
>     vueltastxt=vueltas.get()
>     if not vueltastxt.isdigit():
>         segura.delete(0,END)
>         segura.insert(0,"Vueltas ha de ser un n£mero
> mayor que 0")
>         return None
>     vueltasnum=int(vueltastxt)  
>     segura.delete(0,END)
>    
>
segura.insert(0,generar(sitiotxt,usuariotxt,clavetxt,vueltasnum))
> 
> ventana=Tk()
> ventana.title("Clave_tny_GUI")
> Label(ventana, text="Sitio:").grid(row=0, sticky=W)
> Label(ventana, text="Usuario:").grid(row=1,
> sticky=W)
> Label(ventana, text="Clave:").grid(row=2, sticky=W)
> Label(ventana, text="Vueltas:").grid(row=3,
> sticky=W)
> Label(ventana, text="Clave Segura:").grid(row=4,
> sticky=W)
> sitio=Entry(ventana)
> usuario=Entry(ventana)
> clave=Entry(ventana)
> vueltas=Entry(ventana)
> segura=Entry(ventana)
> sitio.grid(row=0,column=1)
> usuario.grid(row=1,column=1)
> clave.grid(row=2,column=1)
> vueltas.grid(row=3,column=1)
> segura.grid(row=4,column=1)
> Button(ventana, text="Generar",
> command=GUIgenerar).grid(row=5,column=0)
> Button(ventana, text="Copiar",
> command=reproducir).grid(row=5,column=1)
> 
> ventana.mainloop()
> 
> > _______________________________________________
> Python-es mailing list
> Python-es en aditel.org
> http://listas.aditel.org/listinfo/python-es
> 



	
	
		
___________________________________________________________ 
Do You Yahoo!? 
La mejor conexión a Internet y <b >2GB</b> extra a tu correo por $100 al mes. http://net.yahoo.com.mx 




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