Python program to calculate retail shop bill

from tkinter import *
import random

class Shop_bill:
    def __init__(self,root):
        self.root = root
        self.root.geometry("1300x700+0+0")
        self.root.maxsize(width = 1280,height = 700)
        self.root.minsize(width = 1280,height = 700)
        self.root.title("Webeduclick Retail Shop Billing System")
        
        self.cus_name = StringVar()
        self.c_phone = StringVar()

        x = random.randint(1000,9999)
        self.c_bill_no = StringVar()
        #Seting Value to variable
        self.c_bill_no.set(str(x))

        self.bread = IntVar()
        self.candy = IntVar()
        self.hamburger = IntVar()
        self.hotdog = IntVar()
        self.sandwich = IntVar()
        self.rice = IntVar()
        self.salt = IntVar()
        self.food_oil = IntVar()
        self.wheat = IntVar()
        self.sugar = IntVar()
        self.gatorade = IntVar()
        self.coke = IntVar()
        self.juice = IntVar()
        self.waffer = IntVar()
        self.biscuits = IntVar()
        self.total_food = StringVar()
        self.total_grocery = StringVar()
        self.total_other = StringVar()
        self.tax_cos = StringVar()
        self.tax_groc = StringVar()
        self.tax_other = StringVar()


        bg_color = "blue"
        fg_color = "white"
        lbl_color = 'white'
        #Title of App
        title = Label(self.root,text = "Webeduclick Retail Shop Billing System"
,bd = 12,relief = GROOVE,fg = fg_color,bg = bg_color,
font=("times new roman",30,"bold"),pady = 3).pack(fill = X)

    
        F1 = LabelFrame(text = "Customer Details", font = ("time new roman",12, "bold"),
fg = "gold", bg = bg_color, relief = GROOVE, bd = 10)
        F1.place(x = 0,y = 80,relwidth = 1)

        
        cname_lbl = Label(F1,text="Customer Name",bg = bg_color,fg = fg_color,
font=("times new roman",15,"bold")).grid(row = 0,column = 0,padx = 10,pady = 5)
        cname_en = Entry(F1,bd = 8,relief = GROOVE,textvariable = self.cus_name)
        cname_en.grid(row = 0,column = 1,ipady = 4,ipadx = 30,pady = 5)

        
        cphon_lbl = Label(F1, text = "Phone No",bg = bg_color,fg = fg_color, 
font = ("times new roman",15, "bold")).grid(row = 0,column = 2,padx = 20)
        cphon_en = Entry(F1,bd = 8,relief = GROOVE,textvariable = self.c_phone)
        cphon_en.grid(row = 0,column = 3,ipady = 4,ipadx = 30,pady = 5)

      
        cbill_lbl = Label(F1,text = "Bill No.",bg = bg_color,fg = fg_color, 
font = ("times new roman",15,"bold"))
        cbill_lbl.grid(row = 0,column = 4,padx = 20)
        cbill_en = Entry(F1,bd = 8,relief = GROOVE,textvariable = self.c_bill_no)
        cbill_en.grid(row = 0,column = 5,ipadx = 30,ipady = 4,pady = 5)
        
      
        F2 = LabelFrame(self. root, text = 'Food', bd = 10, relief = GROOVE, 
bg = bg_color,fg = "gold", font = ("times new roman",13, "bold"))
        F2.place(x = 5,y = 180,width = 325,height = 380)

        
        bath_lbl = Label(F2,font = ("times new roman",15,"bold"),
fg = lbl_color,bg = bg_color,text = "Bread")
        bath_lbl.grid(row = 0,column = 0,padx = 10,pady = 20)
        bath_en = Entry(F2,bd = 8,relief = GROOVE,textvariable = self.bread)
        bath_en.grid(row = 0,column = 1,ipady = 5,ipadx = 5)

       
        face_lbl = Label(F2,font = ("times new roman",15,"bold"),
fg = lbl_color,bg = bg_color,text = "Butter")
        face_lbl.grid(row = 1,column = 0,padx = 10,pady = 20)
        face_en = Entry(F2,bd = 8,relief = GROOVE,textvariable = self.candy)
        face_en.grid(row = 1,column = 1,ipady = 5,ipadx = 5)

       
        wash_lbl = Label(F2,font = ("times new roman",15,"bold"),
fg = lbl_color,bg = bg_color,text = "Cheese")
        wash_lbl.grid(row = 2,column = 0,padx = 10,pady = 20)
        wash_en = Entry(F2,bd = 8,relief = GROOVE,textvariable = self.hamburger)
        wash_en.grid(row = 2,column = 1,ipady = 5,ipadx = 5)

        
        hair_lbl = Label(F2,font = ("times new roman",15,"bold"),
fg = lbl_color,bg = bg_color,text = "Pizza")
        hair_lbl.grid(row = 3,column = 0,padx = 10,pady = 20)
        hair_en = Entry(F2,bd = 8,relief = GROOVE,textvariable = self.hotdog)
        hair_en.grid(row = 3,column = 1,ipady = 5,ipadx = 5)

        
        lot_lbl = Label(F2,font = ("times new roman",15,"bold"),
fg = lbl_color,bg = bg_color,text = "Sandwich")
        lot_lbl.grid(row = 4,column = 0,padx = 10,pady = 20)
        lot_en = Entry(F2,bd = 8,relief = GROOVE,textvariable = self.sandwich)
        lot_en.grid(row = 4,column = 1,ipady = 5,ipadx = 5)

        
        F2 = LabelFrame(self. root, text = 'Grocery', bd = 10, 
relief = GROOVE, bg = bg_color,fg = "gold", font = ("times new roman",13,"bold"))
        F2.place(x = 330,y = 180,width = 325,height = 380)

        
        rice_lbl = Label(F2,font = ("times new roman",15,"bold"),
fg = lbl_color,bg = bg_color,text = "Rice")
        rice_lbl.grid(row = 0,column = 0,padx = 10,pady = 20)
        rice_en = Entry(F2,bd = 8,relief = GROOVE,textvariable = self.rice)
        rice_en.grid(row = 0,column = 1,ipady = 5,ipadx = 5)

        #=======
        oil_lbl = Label(F2,font = ("times new roman",15,"bold"),
fg = lbl_color,bg = bg_color,text = "Oil")
        oil_lbl.grid(row = 1,column = 0,padx = 10,pady = 20)
        oil_en = Entry(F2,bd = 8,relief = GROOVE,textvariable = self.food_oil)
        oil_en.grid(row = 1,column = 1,ipady = 5,ipadx = 5)

        #=======
        daal_lbl = Label(F2,font = ("times new roman",15,"bold"),
fg = lbl_color,bg = bg_color,text = "Salt")
        daal_lbl.grid(row = 2,column = 0,padx = 10,pady = 20)
        daal_en = Entry(F2,bd = 8,relief = GROOVE,textvariable = self.salt)
        daal_en.grid(row = 2,column = 1,ipady = 5,ipadx = 5)

        #========
        wheat_lbl = Label(F2,font = ("times new roman",15,"bold"),
fg = lbl_color,bg = bg_color,text = "Wheat")
        wheat_lbl.grid(row = 3,column = 0,padx = 10,pady = 20)
        wheat_en = Entry(F2,bd = 8,relief = GROOVE,textvariable = self.wheat)
        wheat_en.grid(row = 3,column = 1,ipady = 5,ipadx = 5)

        #============
        sugar_lbl = Label(F2,font = ("times new roman",15,"bold"),
fg = lbl_color,bg = bg_color,text = "Sugar")
        sugar_lbl.grid(row = 4,column = 0,padx = 10,pady = 20)
        sugar_en = Entry(F2,bd = 8,relief = GROOVE,textvariable = self.sugar)
        sugar_en.grid(row = 4,column = 1,ipady = 5,ipadx = 5)


        F2 = LabelFrame(self. root, text = 'Others', bd = 10, 
relief = GROOVE, bg = bg_color,fg = "gold", font = ("times new roman",13, "bold"))
        F2.place(x = 655,y = 180,width = 325,height = 380)


        maza_lbl = Label(F2,font = ("times new roman",15,"bold"),
fg = lbl_color,bg = bg_color,text = "Milk")
        maza_lbl.grid(row = 0,column = 0,padx = 10,pady = 20)
        maza_en = Entry(F2,bd = 8,relief = GROOVE,textvariable = self.gatorade)
        maza_en.grid(row = 0,column = 1,ipady = 5,ipadx = 5)

        #=======
        cock_lbl = Label(F2,font = ("times new roman",15,"bold"),
fg = lbl_color,bg = bg_color,text = "Coke")
        cock_lbl.grid(row = 1,column = 0,padx = 10,pady = 20)
        cock_en = Entry(F2,bd = 8,relief = GROOVE,textvariable = self.coke)
        cock_en.grid(row = 1,column = 1,ipady = 5,ipadx = 5)

        #=======
        frooti_lbl = Label(F2,font = ("times new roman",15,"bold"),
fg = lbl_color,bg = bg_color,text = "Juice")
        frooti_lbl.grid(row = 2,column = 0,padx = 10,pady = 20)
        frooti_en = Entry(F2,bd = 8,relief = GROOVE,textvariable = self.juice)
        frooti_en.grid(row = 2,column = 1,ipady = 5,ipadx = 5)

        #========
        cold_lbl = Label(F2,font = ("times new roman",15,"bold"),
fg = lbl_color,bg = bg_color,text = "Chocolate")
        cold_lbl.grid(row = 3,column = 0,padx = 10,pady = 20)
        cold_en = Entry(F2,bd = 8,relief = GROOVE,textvariable = self.waffer)
        cold_en.grid(row = 3,column = 1,ipady = 5,ipadx = 5)

        #============
        bis_lbl = Label(F2,font = ("times new roman",15,"bold"),
fg = lbl_color,bg = bg_color,text = "Biscuits")
        bis_lbl.grid(row = 4,column = 0,padx = 10,pady = 20)
        bis_en = Entry(F2,bd = 8,relief = GROOVE,textvariable = self.biscuits)
        bis_en.grid(row = 4,column = 1,ipady = 5,ipadx = 5)

        F3 = Label(self.root,bd = 10,relief = GROOVE)
        F3.place(x = 960,y = 180,width = 325,height = 380)
        #===========
        bill_title = Label(F3, text = "Bill List", font = ("Lucida",13, "bold"),
bd= 7, relief = GROOVE)
        bill_title.pack(fill = X)

        #============
        scroll_y = Scrollbar(F3,orient = VERTICAL)
        self.txt = Text(F3,yscrollcommand = scroll_y.set)
        scroll_y.pack(side = RIGHT,fill = Y)
        scroll_y.config(command = self.txt.yview)
        self.txt.pack(fill = BOTH,expand = 1)

        F4 = LabelFrame(self. root, text = 'Bill Menu', bd = 10, 
relief = GROOVE, bg = bg_color,fg = "gold", font = ("times new roman",13, "bold"))
        F4.place(x = 0,y = 560,relwidth = 1,height = 145)

        #===================
        cosm_lbl = Label(F4,font = ("times new roman",15,"bold"),
fg = lbl_color,bg = bg_color,text = "Total Food")
        cosm_lbl.grid(row = 0,column = 0,padx = 10,pady = 0)
        cosm_en = Entry(F4,bd = 8,relief = GROOVE,textvariable = self.total_food)
        cosm_en.grid(row = 0,column = 1,ipady = 2,ipadx = 5)

        #===================
        gro_lbl = Label(F4,font = ("times new roman",15,"bold"),
fg = lbl_color,bg = bg_color,text = "Total Grocery")
        gro_lbl.grid(row = 1,column = 0,padx = 10,pady = 5)
        gro_en = Entry(F4,bd = 8,relief = GROOVE,textvariable = self.total_grocery)
        gro_en.grid(row = 1,column = 1,ipady = 2,ipadx = 5)

        #================
        oth_lbl = Label(F4,font = ("times new roman",15,"bold"),
fg = lbl_color,bg = bg_color,text = "Others Total")
        oth_lbl.grid(row = 2,column = 0,padx = 10,pady = 5)
        oth_en = Entry(F4,bd = 8,relief = GROOVE,textvariable = self.total_other)
        oth_en.grid(row = 2,column = 1,ipady = 2,ipadx = 5)
 

        #=================
        grot_lbl = Label(F4,font = ("times new roman",15,"bold"),
fg = lbl_color,bg = bg_color,text = "GST")
        grot_lbl.grid(row = 1,column = 2,padx = 30,pady = 5)
        grot_en = Entry(F4,bd = 8,relief = GROOVE,textvariable = self.tax_groc)
        grot_en.grid(row = 1,column = 3,ipady = 2,ipadx = 5)


        #====================
        total_btn = Button(F4,text = "Total",bg = bg_color,
fg = fg_color,font=("lucida",12,"bold"),bd = 7,relief = GROOVE,command = self.total)
        total_btn.grid(row = 1,column = 4,ipadx = 20,padx = 30)

        #========================
        genbill_btn = Button(F4,text = "Generate Bill",
bg = bg_color,fg = fg_color,font=("lucida",12,"bold"),bd = 7,relief = GROOVE,command = self.bill_area)
        genbill_btn.grid(row = 1,column = 5,ipadx = 20)

        #====================
        clear_btn = Button(F4,text = "Clear",bg = bg_color,
fg = fg_color,font=("lucida",12,"bold"),bd = 7,relief = GROOVE,command = self.clear)
        clear_btn.grid(row = 1,column = 6,ipadx = 20,padx = 30)

        #======================
        exit_btn = Button(F4,text = "Exit",bg = bg_color,
fg = fg_color,font=("lucida",12,"bold"),bd = 7,relief = GROOVE,command = self.exit)
        exit_btn.grid(row = 1,column = 7,ipadx = 20)


    def total(self):
        #=================Total Food Prices
        self.total_food_prices = (
            (self.bread.get() * 1)+
            (self.candy.get() * 3)+
            (self.hamburger.get() * 8)+
            (self.hotdog.get() * 6)+
            (self.sandwich.get() * 4)
        )
        self.total_food.set("$"+str(self.total_food_prices))
        self.tax_cos.set("$"+str(round(self.total_food_prices*0.05)))

        self.total_grocery_prices = (
            (self.wheat.get()*1)+
            (self.food_oil.get() * 5)+
            (self.salt.get() * 1)+
            (self.rice.get() *3)+
            (self.sugar.get() * 2)

        )
        self.total_grocery.set("$"+str(self.total_grocery_prices))
        self.tax_groc.set("$"+str(round(self.total_grocery_prices*0.05)))
       
        self.total_other_prices = (
            (self.gatorade.get() * 4)+
            (self.juice.get() * 2)+
            (self.coke.get() * 2)+
            (self.waffer.get() * 2)+
            (self.biscuits.get() * 2)
        )
        self.total_other.set("$"+str(self.total_other_prices))
        self.tax_other.set("$"+str(round(self.total_other_prices*0.05)))



    def welcome_soft(self):
        self.txt.delete('1.0',END)
        self.txt.insert(END,"Welcome To Webeduclick Store's Retail\n")
        self.txt.insert(END,"\nCustomer Name : {str(self.cus_name.get())}")
        self.txt.insert(END,"\nPhone No. : {str(self.c_phone.get())}")
        self.txt.insert(END,"\n===================================")
        self.txt.insert(END,"\nProduct          Qty         Price")
        self.txt.insert(END,"\n===================================")


    def clear(self):
        self.txt.delete('1.0',END)

    def bill_area(self):
        self.welcome_soft()
        if self.bread.get() != 0:
            self.txt.insert(END,"\nBread             {self.bread.get()}           {self.bread.get() * 1}")
        if self.candy.get() != 0:
            self.txt.insert(END,"\nCandy             {self.candy.get()}           {self.candy.get() * 3}")
        if self.hamburger.get() != 0:
            self.txt.insert(END,"\nHamburger         {self.hamburger.get()}           {self.hamburger.get() * 8}")
        if self.hotdog.get() != 0:
            self.txt.insert(END,"\nHotdog            {self.hotdog.get()}           {self.hotdog.get() * 6}")
        if self.sandwich.get() != 0 :
            self.txt.insert(END,"\nSandwich          {self.sandwich.get()}           {self.sandwich.get() * 4}")
        if self.wheat.get() != 0:
            self.txt.insert(END,"\nWheat             {self.wheat.get()}           {self.wheat.get() * 1}")
        if self.food_oil.get() != 0:
            self.txt.insert(END,"\nFood Oil          {self.food_oil.get()}           {self.food_oil.get() * 5}")
        if self.salt.get() != 0:
            self.txt.insert(END,"\nSalt              {self.salt.get()}           {self.salt.get() * 1}")
        if self.rice.get() != 0:
            self.txt.insert(END,"\nRice              {self.rice.get()}           {self.rice.get() * 3}")
        if self.sugar.get() != 0:
            self.txt.insert(END,"\nSugar             {self.sugar.get()}           {self.sugar.get() * 2}")
        if self.gatorade.get() != 0:
            self.txt.insert(END,"\nGatorade          {self.gatorade.get()}           {self.gatorade.get() * 4}")
        if self.juice.get() != 0:
            self.txt.insert(END,"\nJuice             {self.juice.get()}           {self.juice.get() * 2}")
        if self.coke.get() != 0:
            self.txt.insert(END,"\nCoke              {self.coke.get()}           {self.coke.get() * 2}")
        if self.waffer.get() != 0:
            self.txt.insert(END,"\nWaffer            {self.waffer.get()}           {self.waffer.get() * 2}")
        if self.biscuits.get() != 0:
            self.txt.insert(END,"\nBiscuits          {self.biscuits.get()}           {self.biscuits.get() * 2}")
        self.txt.insert(END,"\n===================================")
        self.txt.insert(END,"\nTotal: ${self.total_food_prices+self.total_grocery_prices+self.total_other_prices+self.total_food_prices * 0.05+self.total_grocery_prices * 0.05+self.total_other_prices * 0.05}")


    def exit(self):
        self.root.destroy()

root = Tk()
object = Shop_bill(root)
root.mainloop()

Leave a Reply

Your email address will not be published. Required fields are marked *