Programa sobre Renta de Peliculas / Tkinter / Aportacion de Brandon asael Cerda


# -*- coding: utf-8 -*-from Tkinter import Label,Entry,Button,Tk,Frame,W,N,S,E,END,HORIZONTAL,Spinbox
from ttk import Combobox,Separator
from tkMessageBox import askyesno,showinfo,showerror;
#en el import, solo estoy pidiendo importar los elementos que vamos a usar, para no usar el *
 sin necesidad de traer mas elementos
def AddEntryMovie():
    Movie = CatchMovie.get()
    if (CatchMovie.get()==""):
        CatchMovie.config(bg="red")
        showerror("What Movie it is?", 
        "Por favor ingresa una pelicula! no dejes el campo en blanco!")
        CatchMovie.config(bg="white")
    #Una pequeña "excepcion" por si el campo de texto para ingresar la pelicula esta vacio   
    else:
        if (Classes.get()==""):
            #otra pequeña "excepcion" por si la clasificación de la pelicula no tiene seleccionada una clasificación 
               showerror("What Movie it is?","Por favor selecciona una clasificación!")
        else:
            if (askyesno("Are you sure?", "Deseas añadir esta pelicula: \n\""+Movie+"\"\nA la lista de peliculas?")==True):
                values = list(MoviesOnList["values"])
                #se crea dentro de la funcion la Variable "values" que sera una lista de los valores que se encuentran en la lista despegable             
                MoviesOnList["values"] = values + [Movie]
                #de la lista despegalble agregamos el nuevo valor que esta en nuestro campo de texto, para esto debemos ponerlo entre              
                #[] para que se interprete como el valor de una lista y pueda sumarse a la lista despegable de peliculas 
                Classifications.insert(i,Classes.get())
                #añade la clasificiación a una lista, para asi tenerla disponible en la Lista Despegable de Peliculas disponibles              
                Mov.insert(i,Movie)
                i+1                CatchMovie.delete(0, END)
                #ya lo hemos visto antes pero lo explicare aun asi, .delete(0, END) borra el texto dentro del Entry               
                CatchMovie.insert(0, "")
                #Aqui es casi lo mismo, pero deja el campo Vacio y usable, tambien para evitar errores de captura               
                Classes.set("")
                #Reinicia la Lista Despegable de las clasificaciones                showinfo("Exito!","Has añadido: \""+Movie+"\" A la lista de Peliculas")
            else:
                showinfo("Guess No","La Pelicula: "+Movie+" No sera añadida")
def firstDone():
    if (askyesno("Are you sure?","ADVERTENCIA: ESTA ACCION NO PUEDE SER DESHECHA"
 "\nSi de verdad ya terminaste te agregar peliculas, prosigue, si no, DETENTE!")==True):
        CatchMovie.config(state="disable")
        Classes.config(state="disable")
        AddMov.config(state="disable")
        Done.config(state="disable")
        #tambien se habia visto antes, pero explicare aun asi, el 'state' "disable" deshabilita el componente del frame        app.geometry("600x300")
        #se puede cambiar la dimension de una ventana, aunque se haya establecido un tamaño, esto nos permite controlar la ventana y los componentes a mostrar        MovietoRent.grid()
        MoviesOnList.grid()
        ClassifiedAs.grid()
        AskRent.grid()
        Days4Rent.grid()
        Rent.grid()
        #simplemente con .grid() vuelvo a colocar en su respectivo lugar, los elementos que no son visibles para el usuario, ocultos con '.grid_remove()'   
  else:
        showinfo("","Puedes seguir agregando peliculas si gustas!")
def MovieSel(self):
    ClassifiedAs.config(state="normal")
    #para que un Entry pueda mostrar un texto, es necesario que este en un estado normal (state="normal")  
    ClassifiedAs.delete(0, END)
    ClassifiedAs.insert(0, Classifications.__getitem__(Mov.index(MoviesOnList.get())))
    #aqui se hace uso de la Lista [] y el atributo "__getitem__()" para obtener lo que este en la lista, para ello   
    #es necesario poner un indice numerico, asi que utilizando ".index()" puedo llamar solo el indice (numero en la lista)    
    #y .__getitem__() obtendra el objeto que este en ese indice de la lista, para asi poder mostrar la clasificación correecta   
    ClassifiedAs.config(state="readonly")
    #al cambiar el estado a "Solo Lectura" (state="readonly") el Entry solo mostrara Texto,
     pero no permitira la entrada de datos o textos
def RentAMovie():
    if (askyesno("You ready?","Deseas Rentar la pelicula: "+MoviesOnList.get()+
                              "\n por "+Days4Rent.get()+" Dia/s?")==True):
        if (ClassifiedAs.get()=="Adultos"):
            if(askyesno("Age Issue","Eres Mayor de Edad?")==True):
                showinfo("Ask for: ","Presente su Identificación")
            else:
                showerror("Get outta here","NO SE RENTAN PELICULAS A MENORES")
        else:
            showinfo("Have a nice day!","Disfruta de tu pelicula! \nQue tengas un Buen dia :)")
    else:
        showinfo("Ok?","De acuerdo, revisa tus opciones entonces :)")
app = Tk()
app.geometry("600x120")
app.title("Lista de Peliculas")
vp = Frame(app)
vp.grid(column=0,row=0,padx=(30,30), pady=(20,20))
vp.rowconfigure(0, weight=1)
vp.columnconfigure(0, weight=1)
Classified = Label(vp, text="Clasificación")
Classified.grid(column=2, row=1, padx=(10,10), pady=(10,10))
AskMov = Label(vp, text="Ingrese una Pelicula: ")
AskMov.grid(column=1, row=1, padx=(10,10), pady=(10,10), sticky=W)
cMovie = ""CatchMovie = Entry(vp, textvariable=cMovie, width=35)
CatchMovie.grid(column=1, row=2, padx=(10,10), pady=(10,10))
AddMov = Button(vp, text="Añadir", command=AddEntryMovie)
AddMov.grid(column=3, row=2, padx=(10,10), pady=(10,10))
Done = Button(vp, text="Finalizar", command=firstDone)
Done.grid(column=4, row=2, padx=(10,10), pady=(10,10))
Classes = Combobox (vp, state="readonly")
Classes.grid(column=2, row=2, padx=(10,10), pady=(10,10))
Classes["values"]=["Para todas las Edades","Familiar","Mayores de 10","Adolescentes",
"Mayores de 15","Adultos"]
Separator(vp, orient=HORIZONTAL).grid(column=1,row=3,columnspan=4,sticky=W+E,pady=(10,10))
MovietoRent = Label(vp, text="Pelicula a Rentar: ")
MovietoRent.grid(column=1, row=4, padx=(10,10), pady=(30,10), stick=W)
MovietoRent.grid_remove()
MoviesOnList = Combobox (vp, state="readonly")
MoviesOnList.grid(column=1,row=5,padx=(10,10),pady=(10,10), sticky=W+E)
MoviesOnList.bind("<<ComboboxSelected>>",MovieSel)
MoviesOnList.grid_remove()
ClassifiedAs = Entry (vp,state="readonly")
ClassifiedAs.grid(column=2, row=5, padx=(10,10), pady=(10,10), sticky=W+E)
ClassifiedAs.grid_remove()
AskRent = Label(vp, text="Dias\n a Rentar")
AskRent.grid(column=3, row=4, padx=(10,10), pady=(10,10))
AskRent.grid_remove()
Days4Rent = Spinbox(vp,width=5, from_=1, to=7)
Days4Rent.grid(column=3, row=5, padx=(10,10), pady=(10,10), sticky=N+S)
Days4Rent.grid_remove()
Rent = Button(vp, text="Rentar", command=RentAMovie)
Rent.grid(column=4, row=5, padx=(10,10), pady=(10,10))
Rent.grid_remove()
Classifications = []
Mov = []
i = int(0)
app.mainloop()











No hay comentarios:

Publicar un comentario