tkinter python异常异常回调

时间:2018-03-13 18:40:25

标签: python windows tkinter

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

from Tkinter import *
import ttk
import tkMessageBox
from random import *
import string
import smtplib
from email.MIMEMultipart import MIMEMultipart
from email.MIMEText import MIMEText
from email_config import *
import re

""" Funcion para enviar correo  se le pasara solo el mensaje del body
    Por seguridad los datos con los que accede la aplicacion al servidor 
    de correo estan en el archivo email_config
"""






def email(a):
    fromaddr = data_fromaddr
    toaddr = "pablohasir@gmail.com"
    msg = MIMEMultipart()
    msg['Subject'] = "Registro Correcto"
    body = a
    msg.attach(MIMEText(body, 'plain'))
    server = smtplib.SMTP('smtp.gmail.com', 587)
    server.starttls()
    #server.ehlo()
    server.login(fromaddr, data_email_password)
    text = msg.as_string()
    server.sendmail(fromaddr, toaddr, text)




"""Funcion que verifica los siguientes casos:

    Campos obligatorios
    Contraseña que sea igual a la contrasena
    Captcha Correcto
    Numero de telefono respecta parametro EN PRUEBAS !!!!!!!!!!!!!!!!!

"""
def check_email(a):
    addressToVerify =a
    match = re.match('^[_a-z0-9-]+(\.[_a-z0-9-]+)*@[a-z0-9-]+(\.[a-z0-9-]+)*(\.[a-z]{2,4})$', addressToVerify)

    if match == None:
        print "correo invalido" 
        tkMessageBox.showerror(title = "Correo Invalido", message = "Introduzca un correo válido")
    else:
        return 0



def check_reg():
    #global data_telefonox


    data_telefonox=""
    data_telefonox = data_telefono.get()

    data_correox=""
    data_correox = data_correo.get()

    if data_nombre.get() and data_dni.get() and data_telefono.get() and data_direccion.get() and data_correo.get() and data_contrasena.get() and data_contrasenarep.get() and data_usuario.get() and data_telefono.get() and data_captchar.get():
        #data_numberx=data_telefono.get()
        #print data_numberx

        #print captchar_code
        #print data_captchar.get()
        if len(data_telefono.get()) == 9 and data_telefonox.isdigit():
            if check_email(data_correox) == 0:
                if data_contrasena.get() == data_contrasenarep.get():

                    if data_captchar.get() == captchar_code:
                        #print "codigo correcto"

                        mensaje="Te acabas de registrar con el usuario: " + str(data_usuario.get()) + "\n" + "Felicidades ya puede usar nuestro software."
                        email(mensaje)
                        ventanareg.destroy()



                        tkMessageBox.showinfo(title = "Registro Correcto", message = "Se ha registrado correctamente, recibirá un correo correo.")
                    else:
                        #print "codigo incorrecto"
                        tkMessageBox.showerror(title = "Captchar Incorrecto", message = "Complete el captchar correctamente.")
                else:
                    tkMessageBox.showerror(title = "Error contraseña !!", message = "Confirme su contraseña correctamente.")
            else:
                print ""

        else:
            tkMessageBox.showerror(title = "Error Telefono", message = "Introduzca un número de teléfono válido.")

    else:
        tkMessageBox.showerror(title = "Error Registro", message = "Complete todos los campos obligatorios.")


def captch():
    min_char = 8
    max_char = 12
    allchar = string.ascii_letters + string.digits
    captchar_text= "".join(choice(allchar) for x in range(randint(min_char, max_char)))
    return captchar_text

def check_captch():
    if data_captchar.get() == captchar:
        # the user entered data in the mandatory entry: proceed to nex
        print("next step")



    else:
        tkMessageBox.showerror(title = "Error Registro", message = "Complete todos los campos obligatorios.")




def registrarse():
    global ventanareg
    global data_nombre
    global data_apellido1
    global data_apellido2
    global data_dni
    global data_telefono
    global data_direccion
    global data_usuario
    global data_correo
    global data_contrasena
    global data_contrasenarep
    global data_captchar
    global captchar_code

    captchar_mensaje=""



    ventanareg = Tk()
    ventanareg.title("Registro")
    ventanareg.geometry("300x300")
    ventanareg.resizable(width=FALSE, height=FALSE)



    nombre = Label(ventanareg,text="Nombre: ")
    nombre_required = Label(ventanareg,text="*")
    nombre.grid(column=0, row=0)
    nombre_required.grid(column=3, row=0)

    apellido1 = Label(ventanareg,text="Apellido1: ")
    apellido1.grid(column=0, row=1)


    apellido2 = Label(ventanareg,text="Apellido2: ")
    apellido2.grid(column=0, row=2)

    dni = Label(ventanareg,text="DNI: ")
    dni_required = Label(ventanareg,text="*")
    dni.grid(column=0, row=3)
    dni_required.grid(column=3, row=3)

    telefono = Label(ventanareg,text="Telefono: ")
    telefono_required = Label(ventanareg,text="*")
    telefono.grid(column=0, row=4)
    telefono_required.grid(column=3, row=4)


    direccion = Label(ventanareg,text="Dirección: ")
    direccion_required = Label(ventanareg,text="*")
    direccion.grid(column=0, row=5)
    direccion_required.grid(column=3, row=5)




    correo = Label(ventanareg,text="Correo: ")
    correo_required = Label(ventanareg,text="*")
    correo.grid(column=0, row=6)
    correo_required.grid(column=3, row=6)

    usuario = Label(ventanareg,text="Usuario: ")
    usuario_required = Label(ventanareg,text="*")
    usuario.grid(column=0, row=7)
    usuario_required.grid(column=3, row=7)


    contrasena = Label(ventanareg,text="Contraseña: ")
    contrasena_required = Label(ventanareg,text="*")
    contrasena.grid(column=0, row=8)
    contrasena_required.grid(column=3, row=8)

    contrasenarep = Label(ventanareg,text="Repetir contraseña: ")
    contrasenarep_required = Label(ventanareg,text="*")
    contrasenarep.grid(column=0, row=9)
    contrasenarep_required.grid(column=3, row=9)

    data_nombre = Entry(ventanareg,textvariable=StringVar())
    data_nombre.grid(column=1, row=0)

    data_apellido1 = Entry(ventanareg,textvariable=StringVar())
    data_apellido1.grid(column=1, row=1)

    data_apellido2 = Entry(ventanareg,textvariable=StringVar())
    data_apellido2.grid(column=1, row=2)

    data_dni = Entry(ventanareg,textvariable=StringVar())
    data_dni.grid(column=1, row=3)

    data_telefono = Entry(ventanareg,textvariable=StringVar())
    data_telefono.grid(column=1, row=4)


    data_direccion = Entry(ventanareg,textvariable=StringVar())
    data_direccion.grid(column=1, row=5)

    data_correo = Entry(ventanareg,textvariable=StringVar())
    data_correo.grid(column=1, row=6)

    data_usuario = Entry(ventanareg,textvariable=StringVar())
    data_usuario.grid(column=1, row=7)

    data_contrasena = Entry(ventanareg,show="*",textvariable=StringVar())
    data_contrasena.grid(column=1, row=8)

    data_contrasenarep = Entry(ventanareg,show="*",textvariable=StringVar())
    data_contrasenarep.grid(column=1, row=9)





    captchar_code = captch()
    captchar = "Captcha: " + captchar_code
    captchar = Label(ventanareg,text=captchar)
    captchar_required = Label(ventanareg,text="*")
    captchar.grid(column=0, row=10)

    data_captchar = Entry(ventanareg,textvariable=StringVar())


    data_captchar.grid(column=1, row=10)
    captchar_required.grid(column=3, row=10)




    botonreg= Button(ventanareg,text="Registrar",command=check_reg)
    botonreg.grid(column=0, row=120,columnspan=2)


    ventanareg.mainloop()


def email_reg():
    print ""


def verificar():
    usuario=data_usuario.get()
    contra=data_contra.get()

    if usuario == "123" and contra =="123":
        ventana.destroy()


    else:
        tkMessageBox.showerror(title = "Login incorrecto", message = "Usuario o contraseña incorrecta")


def menu():
    global data_usuario
    global data_contra
    global ventana



ventana = Tk()
ventana.geometry("200x200")
ventana.resizable(width=FALSE, height=FALSE)
ventana.title("ACCESO")
ventana.protocol('WM_DELETE_WINDOW', quit)
usuario = Label(ventana,text="Usuario: ")


contra = Label(ventana,text="Contraseña: ")


data_contra = Entry(ventana,show="*",textvariable=StringVar())
data_usuario = Entry(ventana,textvariable=StringVar())

boton= Button(ventana,text="Acceder",command=verificar)
boton1= Button(ventana,text="Darse de alta",command=registrarse)

usuario.pack()
data_usuario.pack()

contra.pack()
data_contra.pack()

boton.pack()
boton1.pack()


















ventana.mainloop()




ventana_principal=Tk()
ventana_principal.geometry("200x200")
ventana_principal.resizable(width=FALSE, height=FALSE)
ventana_principal.title("PROGRAMA")


barra = ttk.Notebook(ventana_principal)
barra.pack(fill="both",expand="yes")

pes0 = ttk.Frame(barra)
pes1 = ttk.Frame(barra)

barra.add(pes0,text="Menu")

titulo_lista_usuario = Label(pes0, text="Usuario", font=("Helvetica", 14))
titulo_lista_usuario.grid(column=0, row=0)

titulo_lista_contrasena = Label(pes0, text="Contraseña", font=("Helvetica", 14))
titulo_lista_contrasena.grid(column=1, row=0)
lista_contrasena = Text(pes0, height=26, width=20, fg="white", bg="#8c8c8c", font=("Helvetica", 12))


barra.add(pes1,text="Opciones")
boton=Button(pes1,text="Boton1").place(x=0,y=0)























ventana_principal.mainloop()

Exception in Tkinter callback
Traceback (most recent call last):
File "C:\Python27\lib\lib-tk\Tkinter.py", line 1541, in __call__
return self.func(*args)
File "proyecto_actual.pyw", line 267, in verificar
usuario=data_usuario.get()
File "C:\Python27\lib\lib-tk\Tkinter.py", line 2512, in get
return self.tk.call(self._w, 'get')
TclError: invalid command name ".42286696"

首次登录进入 用户123 passwd 123 但当我打开另一个按钮并关闭第二个Windows时,一个Windows 按钮登录它不再有效我不明白错误是。 这是错误 第一次登录进入 用户123 passwd 123 但当我打开另一个按钮并关闭第二个Windows时,一个Windows 按钮登录它不再有用我不明白错误是。

1 个答案:

答案 0 :(得分:0)

class registro:


def __init__(self,master):

    global data_user
    global data_passwd
    frame= Frame(master)
    frame.pack()

    self.regbutton=Button(frame,text="registrar",command=self.regg)
    self.loginbutton=Button(frame,text="login",command=self.check)

    self.data_user=Entry(frame)
    self.data_passwd=Entry(frame)

    self.data_user.pack()
    self.data_passwd.pack()
    self.loginbutton.pack()

    self.regbutton.pack()


def regg(self):
    registro= Tk()
    registro.mainloop()


def check(self):
    clave = "123"
    if self.data_user.get() == clave and self.data_passwd.get() == clave:
        print "correcto"
    else:
        print "incorrecto"

def login(self):
    registro= Tk()

root = Tk()

b = registro(root)

打印“hola”

root.mainloop()

esta es la solucion ya lo consegui gracias

asi puedes crear una ventana y retornar a ella aunque se cree otra desde la misma