Sistema de facturación GUI y tarjeta de menú usando Python

Así que imagine que estamos abriendo un nuevo restaurante o siendo designados como uno de los empleados en una empresa de restaurantes, y descubrimos que no existe un método rápido para realizar la facturación de los clientes, y por lo general nos toma tiempo calcular la cantidad. que un cliente tiene que pagar. Esto puede ser realmente molesto y tomar mucho tiempo para nosotros y para los clientes. ¿Entonces que hago ahora? Aquí es cuando Python viene al rescate y como lo sabemos, serán solo unos segundos de trabajo.

Entonces, en este artículo, vamos a construir un sistema de facturación GUI y una tarjeta de menú con la ayuda del módulo Tkinter de Python .

Paso 1: importar el paquete tkinter

from tkinter import *

Paso 2: Descarga de los archivos necesarios

Aquí hay solo un archivo que tenemos que instalar en este proyecto que funcionará como la imagen de fondo de nuestro Sistema de Facturación GUI o podemos elegir cualquier otra imagen. Después de la descarga, asegúrese de que el programa Python que estamos creando y estos activos estén en la misma carpeta.

Imagen utilizada:

Paso 3: hacer una ventana de tkinter y configurar el fondo

Ahora creamos la ventana tkinter y configuramos el fondo para la GUI 

Python3

# import tkinter module
from tkinter import *
  
# make a window
window = Tk()
  
# specify it's size
window.geometry("700x600")
  
# take a image for background
bg = PhotoImage(file='bg.png')
  
# label it in the background
label17 = Label(window, image=bg)
  
# position the image as well
label17.place(x=0, y=0)
  
# closing the main loop
window.mainloop()

Producción: 

Paso 4: agregar el título y la tarjeta de menú

Ahora agregaremos el título y la tarjeta de menú para el sistema de facturación GUI con la ayuda de la función » Etiqueta()». Tkinter Label es un widget que se utiliza para implementar cuadros de visualización donde podemos colocar texto o imágenes. El desarrollador puede cambiar el texto que muestra este widget en cualquier momento que desee. También se utiliza para realizar tareas como subrayar una parte del texto y dividir el texto en varias líneas. Es importante tener en cuenta que una etiqueta solo puede usar una fuente a la vez para mostrar el texto. Para usar una etiqueta, solo tenemos que especificar qué mostrar en ella (puede ser texto, un mapa de bits o una imagen).

Sintaxis:  w = Etiqueta (maestro, opción, …)

Parámetros:  

  • maestro: esto representa la ventana principal
  • opciones: estas opciones se pueden usar como pares clave-valor separados por comas

Python3

# main title
label8 = Label(window, text="Saransh Restaurant",
               font="times 28 bold")
label8.place(x=350, y=20, anchor="center")
  
# Menu Card
label1 = Label(window, text="Menu",
               font="times 28 bold")
label1.place(x=520, y=70)
  
label2 = Label(window, text="Aloo Paratha Rs 30",
               font="times 18")
label2.place(x=450, y=120)
  
label3 = Label(window, text="Samosa  Rs 5",
               font="times 18")
label3.place(x=450, y=150)
  
label4 = Label(window, text="Pizza   Rs 150",
               font="times 18")
label4.place(x=450, y=180)
  
label5 = Label(window, text="Chilli Potato  Rs 50",
               font="times 18")
label5.place(x=450, y=210)
  
label6 = Label(window, text="Chowmein   Rs 70",
               font="times 18")
label6.place(x=450, y=240)
  
label7 = Label(window, text="Gulab Jamun  Rs 35",
               font="times 18")
label7.place(x=450, y=270)
  
# closing the main loop
window.mainloop()

Producción:  

Paso 5: Agregar la sección de facturación

Ahora agregaremos la sección de facturación usando el mismo widget de etiqueta y el widget de entrada. El widget de entrada es un widget de Tkinter que se utiliza para ingresar o mostrar una sola línea de texto. Además, Label.place(x,y) indica la posición de la etiqueta en la ventana de tkinter.

Sintaxis:  entrada = tk.Entry(padre, opciones)

Parámetros:  

  • padre: esto representa la ventana principal
  • opciones: estas opciones se pueden usar como pares clave-valor separados por comas

Python3

#------billing section---------
label9=Label(window,text="Select the items",
             font="times 18")
label9.place(x=115,y=70)
  
label10=Label(window,text="Aloo Paratha",
              font="times 18")
label10.place(x=20,y=120)
  
e1=Entry(window)
e1.place(x=20,y=150)
  
label11=Label(window,text="Samosa",
              font="times 18")
label11.place(x=20,y=200)
  
e2=Entry(window)
e2.place(x=20,y=230)
  
label12=Label(window,text="Pizza",
              font="times 18")
label12.place(x=20,y=280)
  
e3=Entry(window)
e3.place(x=20,y=310)
  
label13=Label(window,text="Chilli Potato",
              font="times 18")
label13.place(x=20,y=360)
  
e4=Entry(window)
e4.place(x=20,y=390)
  
label14=Label(window,text="Chowmein",
              font="times 18")
label14.place(x=250,y=120)
  
e5=Entry(window)
e5.place(x=250,y=150)
  
label15=Label(window,text="Gulab Jamun",
              font="times 18")
label15.place(x=250,y=200)
  
e6=Entry(window)
e6.place(x=250,y=230)
  
# closing the main loop
window.mainloop() 

Producción: 

Paso 6: Calcular la factura y actualizar la ventana

Después de eso, tenemos que agregar la función de cálculo que se ejecutará cada segundo. En la función de cálculo, tenemos que hacer cálculos matemáticos simples donde si e.get() devuelve una string vacía, significa que no hay una cantidad seleccionada para ese alimento en particular, de lo contrario, si hay algún valor presente en e.get() entonces ya que es de tipo string, lo convertimos a tipo int y multiplicamos esta cantidad de comida por el precio de esa comida. La variable comida junto con su cantidad y precio se guarda en un diccionario. Buscamos todas las claves en el diccionario y, en consecuencia, incrementamos nuestra variable ‘total’. Después de eso, hacemos otra etiqueta donde usamos el valor de la variable total para mostrar la cantidad total de alimentos pedidos. Luego hicimos un comando que después de cada 1000 milisegundos actualizamos la ventana para calcular nuevamente la cantidad total de alimentos pedidos que actualizará nuestra GUI. Además, la etiqueta de cantidad total se actualiza destruyendo la anterior y actualizándola con una nueva cada segundo. 

Python3

# function to calculate the
# price of all the orders
  
  
def calculate():
    
   # dic for storing the food quantity and price
    dic = {'aloo_partha': [e1, 30],
           'samosa': [e2, 5],
           'pizza': [e3, 150],
           'chilli_potato': [e4, 50],
           'chowmein': [e5, 70],
           'gulab_jamun': [e6, 35]}
    total = 0
      
    for key, val in dic.items():
        if val[0].get() != "":
            total += int(val[0].get())*val[1]
    label16 = Label(window,
                    text="Your Total Bill is - "+str(total),
                    font="times 18")
  
    # position
    label16.place(x=20, y=490)
  
    # it will update the label with a new one
    label16.after(1000, label16.destroy)
  
    # refreshing the window
    window.after(1000, calculate)
  
  
# execute calculate function after 1 second
window.after(1000, calculate)
window.mainloop()

Producción: 

A continuación se muestra la implementación completa:

Python3

# import tkinter module
from tkinter import *
  
# make a window
window = Tk()
  
# specify it's size
window.geometry("700x600")
  
# take a image for background
bg = PhotoImage(file='bg.png')
  
# label it in the background
label17 = Label(window, image=bg)
  
# position the image as well
label17.place(x=0, y=0)
  
  
# function to calculate the
# price of all the orders
def calculate():
  
        # dic for storing the
    # food quantity and price
    dic = {'aloo_partha': [e1, 30],
           'samosa': [e2, 5],
           'pizza': [e3, 150],
           'chilli_potato': [e4, 50],
           'chowmein': [e5, 70],
           'gulab_jamun': [e6, 35]}
    total = 0
    for key, val in dic.items():
        if val[0].get() != "":
            total += int(val[0].get())*val[1]
  
    label16 = Label(window,
                    text="Your Total Bill is - "+str(total),
                    font="times 18")
  
    # position it
    label16.place(x=20, y=490)
    label16.after(1000, label16.destroy)
    window.after(1000, calculate)
  
  
label8 = Label(window,
               text="Saransh Restaurant",
               font="times 28 bold")
label8.place(x=350, y=20, anchor="center")
  
  
label1 = Label(window,
               text="Menu",
               font="times 28 bold")
  
label1.place(x=520, y=70)
  
label2 = Label(window, text="Aloo Paratha  \
Rs 30", font="times 18")
  
label2.place(x=450, y=120)
  
label3 = Label(window, text="Samosa    \
Rs 5", font="times 18")
  
label3.place(x=450, y=150)
  
label4 = Label(window, text="Pizza        \
Rs 150", font="times 18")
label4.place(x=450, y=180)
  
label5 = Label(window, text="Chilli Potato  \
Rs 50", font="times 18")
  
label5.place(x=450, y=210)
  
label6 = Label(window, text="Chowmein   \
Rs 70", font="times 18")
  
label6.place(x=450, y=240)
  
label7 = Label(window, text="Gulab Jamun  \
Rs 35", font="times 18")
  
label7.place(x=450, y=270)
  
# billing section
label9 = Label(window, text="Select the items",
               font="times 18")
label9.place(x=115, y=70)
  
label10 = Label(window,
                text="Aloo Paratha",
                font="times 18")
label10.place(x=20, y=120)
  
e1 = Entry(window)
e1.place(x=20, y=150)
  
label11 = Label(window, text="Samosa",
                font="times 18")
label11.place(x=20, y=200)
  
e2 = Entry(window)
e2.place(x=20, y=230)
  
label12 = Label(window, text="Pizza",
                font="times 18")
label12.place(x=20, y=280)
  
e3 = Entry(window)
e3.place(x=20, y=310)
  
label13 = Label(window,
                text="Chilli Potato",
                font="times 18")
label13.place(x=20, y=360)
  
e4 = Entry(window)
e4.place(x=20, y=390)
  
label14 = Label(window,
                text="Chowmein",
                font="times 18")
label14.place(x=250, y=120)
  
e5 = Entry(window)
e5.place(x=250, y=150)
  
label15 = Label(window,
                text="Gulab Jamun",
                font="times 18")
  
label15.place(x=250, y=200)
  
e6 = Entry(window)
e6.place(x=250, y=230)
  
# execute calculate function after 1 second
window.after(1000, calculate)
  
# closing the main loop
window.mainloop()

Producción:

Publicación traducida automáticamente

Artículo escrito por saranshsahgal y traducido por Barcelona Geeks. The original can be accessed here. Licence: CCBY-SA

Deja una respuesta

Tu dirección de correo electrónico no será publicada. Los campos obligatorios están marcados con *