interfaz con el boton cancelar explicacion





# -*- coding: utf-8 -*-
from Tkinter import *
import Tkinter as tk
import tkMessageBox
global cad

"""Creamos una funcion para saber el tipo de hamburguesa seleccionado y la cantidad de pedido, 
utilizamos el get para obtener los datos almacenados en las variables pertenecientes del frame,
en esta funcion utilizamos condiciones if, y elif, ya que si no es una es otra, en cada  condicion 
se le es añadido a una variable el costo de la hamburguesa, esta variable es declarada inicialmente en 0,
despues de salir de las condiciones nos muestra una variable la cual su valor sera igual a la multiplicacion
de cantidad por el costo de la hamburguesa, esto seria el equivalente al costo total de las hamburguesas el cual vamos a 
 retornar para utilizar a futuru."""
def thamb():
    hamb=var1.get()
    cantidad=cant.get()
    costohamb=0
    if hamb == "Hamburguesa sencilla":
        costohamb=15
    elif hamb == "Hamburguesa Doble":
        costohamb=25
    elif hamb == "Hamburguesa triple":
        costohamb=35
    costo=cantidad*costohamb
    return costo

""" Creamos al igual una funcion la cual contendra la selecion de complementos y la cantidad de ellos introducidas, 
utilizamos el get para obtener los datos almacenados en las variables pertenecientes del frame, 
declaramos una variable para el costo total de los complementos, la cual la inicializamos en 0, 
en esta funcion utilizamos condiciones if, ya que vamos a evaluar las tres, ya que esta conectado a un 
checkbutton puede haber mas de una opcion o ninguna, dentro de los if utilizamos la variable del costo total de 
complemetos la cual tendra el calor de si misma mas la multiplicacion del precio por la cantidad del complemento, 
esto se almacena en la variable y al final de los if, la retornamos para posteriormente utilizarla."""
def comp():
    costocomp=0
    cantidadR = cant1.get()
    cantidadP = cant2.get()
    cantidadB = cant3.get()
    refresco=CheckVar1.get()
    papas=CheckVar2.get()
    burrito=CheckVar3.get()
    if refresco ==1:
        costocomp=costocomp+(15*cantidadR)
    if papas ==1:
        costocomp=costocomp+(20*cantidadP)
    if burrito ==1:
        costocomp=costocomp+(18*cantidadB)
    return costocomp

"""Creamos una funcion para calcular el impuesto, este impuesto se manejara cuando el pago se con tarjeta, usamos una variable llamada iva que sera igual 
a la multiplicacion del 15% por el total el cual se realiza en totali, despues retornamos el iva para usarlo despues.
"""
def impuesto():
    iva = 0.15 * totali()
    return iva

"""En la interfaz nos dice total, es decir que con esta funcion sumaremos el total de la hamburguesa  mas el total de los complementos, 
y retornamos el resultado de la suma para usarla para calcular el impuesto y el total final
"""
def totali():
    total=thamb()+comp()
    return total

"""La funcion creada a continuacion es para calcular el total final, el cual dependera de la forma de pago, ya que si es con tarjeta se aplica un impuesto, y si no el precio es el mismo que el totali,
para esto obtenemos con el get el valor de la variable que almacena la opcion del radio botton, y declaramos una variable para guardar el total final, la cual inicializaremos en 0, 
en este caso utilizaremos el if y elif, ya que si no es una debe ser la otra, y si no con un else mandamos una tkMessengebox diciendo que no se ha seleccionado la forma de pago,
en el if de pago con tarjeta, cuando esta se cumple, la variable total final sera igual a la suma de las funciones totali mas impuesto, y declararemos una variable llamada iva en la cual sera igual a la funcion impuesto,
si el pago es con efectivo en elif tomaremos la variable total final igualandola a la funcion totali, y declarando la variable iva igual a 0, esto con el fin de que podamos imprimir en una etiqueta el calor del totali, 
total final y del iva como se muestran los Label despues de las condiciones, en esta funcion hacemos llamar la funcion listapedido la cual creara una lista de los productos seleccionados"""
def totalf():
    formapago=var.get()
    totf=0
    if formapago ==1:
        totf=totali()+impuesto()
        iva=impuesto()

    elif formapago ==2:
        totf=totali()
        iva=0
    else:
        tkMessageBox.showerror("Error "," no se ha seleccionado una forma de pago")
    rtotalfinal = Label(miFrame, text=totf, bg="yellow", font=("Arial", 14),  ).grid(row=9, column=2, pady="1", padx="15",sticky="w")
    riva = Label(miFrame, text=iva, bg="yellow", font=("Arial", 14)).grid(row=8, column=2, pady="1", padx="15",sticky="w")
    rtotal = Label(miFrame, text=totali(), bg="yellow", font=("Arial", 14)).grid(row=7, column=2, pady="1", padx="15",sticky="w")
    listapedido()


"""Creamos esta funcion para insertar los productos selecionados en un Listbox, para insertar y elimiar, esto se debe hacer despues de declarar el listbox pero antes de empaquetarlo, o de poner ya sea .grid,.config,.pack
 para insertar creamos un if para ver si hay algun producto seleccionado, si hay entra y compara, para el caso de la seleccion de la hamburguesas declaramos una variable global en la vamos a usar para las tres condiciones 
 de las hamburguesas, despues de salir de las condiciones tenemos la sintasix para insertar que es nombrelistbox.insert(numerodeposicion,"texto a insertar, o en el caso de las hamburguesas la variable), 
 para poder eliminar usamos la siguiente sintaxis: nombrelistbox.delete(numerodeposicionaborrar), despues de poner lo insert o los delete, empaquetamos el listbox y listo """
def listapedido():
    cad=""
    hamb = var1.get()
    refresco = CheckVar1.get()
    papas = CheckVar2.get()
    burrito = CheckVar3.get()
    listpedido = Listbox(miFrame, width=50)
    if hamb != "No ha selecionado" or refresco == 1 or papas == 1 or burrito == 1:
        if hamb == "Hamburguesa sencilla":
            cad += "Hamburguesa sencilla $15 c/u"
        elif hamb == "Hamburguesa Doble":
            cad += "Hamburguesa Doble $25 c/u"
        elif hamb == "Hamburguesa triple":
            cad += "Hamburguesa triple $35 c/u"
        listpedido.insert(0, cad)
        # insert
        if refresco == 1:
            listpedido.insert(1, "Refresco $15 c/u")
        if papas == 1:
            listpedido.insert(2, "Papas $20 c/u")
        if burrito == 1:
            listpedido.insert(3, "Burrito $18 c/u")
    #DELETE
    elif hamb == "No ha selecionado" and refresco == 0 and papas == 0 and burrito == 0:
        listpedido.delete(0)
        listpedido.delete(1)
        listpedido.delete(2)
        listpedido.delete(3)

    listpedido.grid(row=2, column=2, pady="1", padx="4")

"""para Limpiar las cajas, tenemos la opcion de borar desde un inicio fijado hasta el final del texto disponible en el entry,
 gracias a un indice que nos da TKinter que es 'END', con este podemos de la siguiente 
forma borrar desde el inicio hasta el final sin necesitar conocer cuantos caracteres componen el texto contenido en el widget, 
este empieza una cadenita de llamado de funciones para limpiar la interfaz 
cuando oprimimos cancelar"""
def limpiarcajas():
    cuadrohamb.delete(0, 'end')
    cuadrorefresco.delete(0,'end')
    cuadroburrito.delete(0,'end')
    cuadropapas.delete(0,'end')
    limpiarbotones()

"""para limpiar los botones simplemente mandamos con el set en el de el menu el mensaje inicial, y en los otros mandamos None,
 pero esto se lo asignamos a las varibles usadas para los botones.
Para limpiar las etiquetas de los totales y el impuesto imprimimos una etiqueta en blanco
"""
def limpiarbotones():
    var1.set("No ha selecionado")
    CheckVar1.set(None)
    CheckVar2.set(None)
    CheckVar3.set(None)
    var.set(None)
    rtotalfinal = Label(miFrame, text="            ", bg="yellow", font=("Arial", 14), ).grid(row=9, column=2, pady="1",padx="15", sticky="w")
    riva = Label(miFrame, text="            ", bg="yellow", font=("Arial", 14)).grid(row=8, column=2, pady="1", padx="15", sticky="w")
    rtotal = Label(miFrame, text="            ", bg="yellow", font=("Arial", 14)).grid(row=7, column=2, pady="1", padx="15", sticky="w")
    limpiarlistapedido()

"""Para limpiar la lista pedido o Listbox las variables de los checkbutton y las cajas de los complementos les mandamos con el set el valor de 0, 
asi llamando a la funcion listapedido se ira a la parte del delete y por ultimo mostramos un mensaje de que se ha borrado todo y puede volver a pedir
"""
def limpiarlistapedido():
    cant.set(0)
    cant1.set(0)
    cant2.set(0)
    cant3.set(0)
    CheckVar1.set(0)
    CheckVar2.set(0)
    CheckVar3.set(0)
    listapedido()
    tkMessageBox.showinfo("Cancelacion exitosa", "Se ha cancelado el pedido, y esta listo para realizar nuevo pedido")

"""Para terminar el programa utilizamos esta funcion de ocultar,
 aunque otra opcion podria ser destroy
 """
def ocultar(ventana): ventana.withdraw()

#Creacion de la ventana principal
"""Como ya hemos visto las creaciones de ventana, hic
raiz.title("ventana primaria")imos una ventana raiz, en la cual creamos un frame, 
con el relief(atributo que se le da a configuracion) caqmbiamos el diseño de la ventanas, con el bd el tamaño del borde y con el cursor el tipo de cursor
"""
raiz=Tk()
raiz.resizable(1,1) #para permitir agrandar o no el ancho o la altura con el moyuse
#raiz.iconbitmap("Hamburger.ico")
#raiz.geometry("500x600")
raiz.config(bg="orange")
raiz.config(bd=15)
raiz.config(relief="groove")
"""Al crear el Frame debemos indicar a quien pertenece en este caso el frame pertenece a la raiz, todos los componentes creados para la interfaz van a pertenecer al frame, 
aunque tambien pueden pertenecer a la raiz, en este caso solo un boton pertenecera a la raiz."""
miFrame=Frame(raiz)
miFrame.pack()
miFrame.config(bg="yellow")
miFrame.config(bd=10)
miFrame.config(relief="sunken")
miFrame.config(cursor="hand2")

#Etiquetas

"""Nombre de la etiqueta = Label (a quien pertenece, text(indica que es lo que mostrara)=El texto a mostrar,
 fg(color de letra)=color en ingles o puede ser en hexadecimal, 
bg(lo utilizamos para indicar el color del fondo este lo indicamos para cuando usamos un color diferente al predeterminado)=color del fondo, 
font(aqui podemos indicar el tipo de letra y el tamaño del texto)=("tipoletra",Tamaño en #)).grid(utilizamos el .grid para darle la posicion 
en el frame es decir crea una cuadicula que podriamos decir que es como una matriz)(row=numerodefila,column=numerodecolumna,
pady="numerode separacionenY",sticky="Posicion se indica con los puntos cardenales en ingles 
N, S, E, W se utiliza solo la inicial ")"""

miLabel1=Label(miFrame, text="Hamburguesa feliz", fg="red",bg="yellow",font=("Arial Black",25)).grid(row=0,column=0,pady="4")
OrdenH=Label(miFrame, text="Seleccione la hamburguesa", bg="yellow",font=("Arial",14)).grid(row=1,column=0,pady="1",padx="15", sticky="w")
Pedido=Label(miFrame, text="Pedido:", bg="yellow",font=("Arial",14)).grid(row=1,column=2,pady="1")
cantidadhamb=Label(miFrame, text="Cantidad de Hamburguesas:", bg="yellow",font=("Arial",14)).grid(row=2,column=0,pady="1",padx="15", sticky="w")
complementos=Label(miFrame, text="Complementos:", bg="yellow",font=("Arial",14)).grid(row=3,column=0,pady="1",padx="15", sticky="w")
Cantidadcomp=Label(miFrame, text="Cantidad complementos:", bg="yellow",font=("Arial",14)).grid(row=3,column=1,pady="1",padx="15", sticky="w")
Formadepago=Label(miFrame, text="Forma de pago:", bg="yellow",font=("Arial",14)).grid(row=7,column=0,pady="1",padx="15", sticky="w")
Total=Label(miFrame, text="Total:", bg="yellow",font=("Arial",14)).grid(row=7,column=1,pady="1",padx="15", sticky="w")
IVA=Label(miFrame, text="IVA:", bg="yellow",font=("Arial",14)).grid(row=8,column=1,pady="1",padx="15", sticky="w")
TotalFinal=Label(miFrame, text="Total final:", bg="yellow",font=("Arial",14)).grid(row=9,column=1,pady="1",padx="15", sticky="w")

#Lista de opciones desplegable

"""para la menu de opciones o mejor conocidas como OptionMenu, creamos una variable la cual declaramos de tipo string e indicamos a donde pertenecees decir:

nombredelavariable=tk.StringVar(aquienpertenece)                           .esta variable la usaremos para guardar la opcion seleccionada, pero como al inicio
                                                                           no tiene ninguna seleccionada ponemos: 
nombredelavariable.set("Mensaje")                                          el set es para enviar, creamos un arreglo con las opciones es decir:
nombrearreglo=["Op1","Op2",...,"Opn"]                                      , enseguida de crear el arreglo creamos el OptionMenu la sintaxis seria:
nombre=tk.OptionMenu(aquienpertenece,nombredelavariable,*nombrearreglo)    ya que usaremos config para el ancho y grid para la pocicion tengremos que escribir separados, es decir:
nombre.config(width=anchoennumero)
nombre.grid(row=numerofila,column=numerocolumna)                           esto seria para crear un menu de opciones"""

var1=tk.StringVar(miFrame)
var1.set("No ha selecionado")
opciones=["Hamburguesa sencilla","Hamburguesa Doble","Hamburguesa triple"]
opcion=tk.OptionMenu(miFrame,var1,*opciones)
opcion.config(width=20)
opcion.grid(row=1,column=1)

#Listbox

"""para crear un listbox la sintaxis seria:
nombre=Listbox(aquienpertenece, width=anchonumero)
nombre.grid(row=numerofila, column=numerocolumna, pady="numerodeespacioenY", padx="numerodeespacioenX"), esto seria para crear el puro cascaron, 
para ingresar datos lo vemos en la funcion listapedido(), el de la linea 202 es por simple estetica"""

c= Listbox(miFrame, width=50).grid(row=2, column=2, pady="1", padx="4")

#Entrys

"""Los entrys son cajas de texto, como todos conocemos sirven para ingresar, pero tambien podemos imprimir en ellos
como cada caja de texto o entry es individual debemos crear una variable para cada una a usar y la declararemos de que tipo de dato hablamos.

nombrevariablecaja=tk.IntVar'tipo de dato'(aquienpertenece)                          esto solo es la variable donde almacenaremos el dato ingresado en el entry la siguiente sintaxis 
                                                                                     es para crear el entry:
nombreentry=Entry(aquienpertenece, textvariable=nombrevariablecaja)                  el textvariable es para indicar donde almacenaremos lo que ingresamos en el entry
nombreentry.grid(row=numerofila,column=numerocolumna,pady="numerodeespacionenY")     igual que todos los elementos utilizamos el grid para indicar su pocicion,
                                                                                     y si queremos un interlineado por llamarlo de una forma
nombreentry.config(fg="colordetexto", justify="posicion de justificacion")           en el config utilizanmos el justify, este utiliza para justificar el texto como  
                                                                                     si usaramos word solo indicamos center, left o right"""

cant=tk.IntVar(miFrame)
cant.set(0)
cant1=tk.IntVar(miFrame)
cant1.set(0)
cant2=tk.IntVar(miFrame)
cant2.set(0)
cant3=tk.IntVar(miFrame)
cant3.set(0)
cuadrohamb=Entry(miFrame, textvariable=cant )
cuadrohamb.grid(row=2,column=1,pady="1")
cuadrohamb.config(fg="blue", justify="center")
cuadrorefresco=Entry(miFrame, textvariable=cant1 )
cuadrorefresco.grid(row=4,column=1,pady="1")
cuadrorefresco.config(fg="blue", justify="center")
cuadropapas=Entry(miFrame,textvariable=cant2 )
cuadropapas.grid(row=5,column=1,pady="1")
cuadropapas.config(fg="blue", justify="center")
cuadroburrito=Entry(miFrame,textvariable=cant3 )
cuadroburrito.grid(row=6,column=1,pady="1")
cuadroburrito.config(fg="blue", justify="center")

#Checkbutton
"""El Checkbutton es una casilla de verificación que al igual que los entry son individuales, es decir que son  lo contrario a los radiobutton, el checkbutton nos permite elegir mas de 1 opcion
al mismo tiempo para estro declararemos una variable para cada checkbutton:
nombrevariableCheckButton=tipodedato()                                                   para crear el checkbutton:
nombreCheckbutton=Checkbutton(aquienpertenece,text="Texto a verificar",bg="color fondo", variable=nombrevariableCheckButton)        
nombreCheckbutto.grid(row=numerofila,column=numerocolumna, sticky="posicion",padx="separacionenX")
nombreCheckbutto.config(onvalue=1, offvalue=0)                                           para dar el valor 1 cuando lo seleccionamos y de 0 cuando no """

CheckVar1=IntVar()
CheckVar2=IntVar()
CheckVar3=IntVar()
Refresco=Checkbutton(miFrame,text="Refresco",bg="yellow", variable=CheckVar1)
Refresco.grid(row=4,column=0, sticky="w",padx="15")
Refresco.config(onvalue=1, offvalue=0)
Papas=Checkbutton(miFrame,text="Papas", bg="yellow",variable=CheckVar2)
Papas.grid(row=5,column=0, sticky="w",padx="15")
Papas.config(onvalue=1, offvalue=0)
Burrito=Checkbutton(miFrame,text="Burrito",bg="yellow", variable=CheckVar3)
Burrito.grid(row=6,column=0, sticky="w",padx="15")
Burrito.config(onvalue=1, offvalue=0)

#Radiobutton
"""El radio button es un boton de seleccion compartida es decir que si seleccionamos una no podemos seleccionar la otra, 
un ejemplo de esto seria la opcion de sexo ya sea mujer u hombre
es decir que comparte la misma variable la sintaxis es:

nombrevariable= IntVar()
nombreRadiobutton1 = Radiobutton(aquienpertenece, text="texto opcion1", bg="color fondo", variable=nombrevariable, value=1)      value es el valor que tomara la variable, este servira para saber cual opcion se selecciono y trabajar con ella
nombreRadiobutton1.grid(row=numerofila,column=numerocolumna, sticky="posicion",padx="separacionenX")                             
nombreRadiobutton2 = Radiobutton(aquienpertenece, text="texto opcion2", bg="color fondo", variable=nombrevariable, value=2) 
nombreRadiobutton2.grid(row=numerofila,column=numerocolumna, sticky="posicion",padx="separacionenX")  """
var = IntVar()
R1 = Radiobutton(miFrame, text="Tarjeta de credito",bg="yellow", variable=var, value=1)#, command=sel)
R1.grid(row=8,column=0, sticky="w",padx="15")
R2 = Radiobutton(miFrame, text="Efectivo",bg="yellow", variable=var, value=2) #, command=sel)
R2.grid(row=9,column=0, sticky="w",padx="15")

#botones
"""Los botones hacen un evento en este caso llaman a uno o mejor dijo llaman a una funcion. La sintaxis seria la siguiente:
nombreboton=Button(aquienpertenece, text= "texto que mostrara el boton",command=llamandolafuncion)      
nombreboton.grid(row=numerofila,column=numerocolumna, sticky="posicion",padx="separacionenX")                                          """
Cancelar=Button(miFrame, text= "Cancelar",command=limpiarcajas)
Cancelar.grid(row=10,column=0, sticky="w",padx="15")
Comprar=Button(miFrame, text= "Hacer pedido",  bg="Green",command=totalf)
Comprar.grid(row=10,column=2, sticky="e",padx="15")
Terminar=Button(raiz, text= "Terminar", bg="Red", command=lambda: ocultar(raiz))
Terminar.pack()

raiz.mainloop()





Comentarios

Entradas más populares de este blog

Ejercicios en PyCharm

1.1 Aplicaciones gráficas por computadora.

Ensayo de lenguaje ensamblador