# coding=utf-8
# Aportacion de Brandon Asael Cerda Hernandez
# Programa: con listas, combo box, agrega a la lista las
peliculas al guardar
# excelente programa en python!!!
# -*- coding: utf-8 -*-from Tkinter import
Label,Entry,Button,Tk,Frame,W,N,S,E,END,HORIZONTAL,Spinbox
from ttk import *
from tkMessageBox import askyesno, showinfo, showerror;
from Tkinter import *
# 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")
if (Classes.get()
== ""):
# otra pequeña
"excepcion" por si la clasificación de la pelicula no tiene seleccionada
una clasificacion
showerror("What Movie it is?", "Por favor selecciona una
clasificacion!")
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 anadido: \"" + Movie +
"\" A la lista de Peliculas")
else:
showinfo("Guess No", "La Pelicula: " + Movie +
" No sera anadida")
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()'
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("600x400")
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 = StringVar
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(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