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