# -*- 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()