Introduction
In this article, we are going to build a Cab Booking System in Python with the help of Tkinter. Tkinter is a Python library used to make GUI-based applications easily. Python with Tkinter is the fastest and easiest way to create a GUI-based application. We will use SQLite as the database to store the user information.
Project overview: Cab Booking System in Python
Project Name: | Cab Booking System in Python |
Abstract: | We are going to create a GUI-based project which will have basic taxi booking features. |
Technologies Used: | Python, Tkinter, and SQLite |
IDE: | VS code |
Python version (Recommended): | 3.x |
Database: | SQLite |
Type: | Desktop Applications |
Recommended for: | All Python learners |
Features
- The user has to Register himself and log in to the application to be able to use it.
- The user will be able to pick and provide ride information from a list of different ride options.
- The user will be able to book the ride of his choice.
Complete Code for Cab Booking System in Python
First of all, download the image required for the project from here to be used in Cab Booking System in Python. Now, create a folder for the project and keep the image in it, and also create a file with the name main.py and paste the following code into it.
from tkinter import * from tkinter import ttk import random import time from tkinter import messagebox as ms import sqlite3 Item4 = 0 # make database and users (if not exists already) table at programme start up with sqlite3.connect('Users.db') as db: c = db.cursor() c.execute('CREATE TABLE IF NOT EXISTS user (username TEXT NOT NULL ,password TEXT NOT NULL)') db.commit() db.close() #main Class class user: def __init__(self,master): # Window self.master = master # Some Usefull variables self.username = StringVar() self.password = StringVar() self.n_username = StringVar() self.n_password = StringVar() #Create Widgets self.widgets() #Login Function def login(self): #Establish Connection with sqlite3.connect('Users.db') as db: c = db.cursor() #Find user If there is any take proper action find_user = ('SELECT * FROM user WHERE username = ? and password = ?') c.execute(find_user,[(self.username.get()),(self.password.get())]) result = c.fetchall() if result: self.logf.pack_forget() self.head['text'] = "Welcome " + self.username.get() self.head.configure(fg="White", bg="black", font=("MV Boli", 30, "bold")) self.head.pack(fill=X) application = travel(root) else: ms.showerror('Oops!','Username Not Found.') def new_user(self): #Establish Connection with sqlite3.connect('Users.db') as db: c = db.cursor() #Find Existing username if any take proper action find_user = ('SELECT * FROM user WHERE username = ?') c.execute(find_user,[(self.username.get())]) if c.fetchall(): ms.showerror('Error!','Username Already Taken!') else: ms.showinfo('Success!','Account Created!') self.log() #Create New Account insert = 'INSERT INTO user(username,password) VALUES(?,?)' c.execute(insert,[(self.n_username.get()),(self.n_password.get())]) db.commit() #Frame Packing Methods def log(self): self.username.set('') self.password.set('') self.crf.pack_forget() self.head['text'] = 'Login' self.logf.pack() def cr(self): self.n_username.set('') self.n_password.set('') self.logf.pack_forget() self.head['text'] = 'Create Account' self.crf.pack() #Draw Widgets def widgets(self): self.head = Label(self.master,text = 'Login Panel',font = ('',20),pady = 10) self.head.pack() self.logf = Frame(self.master, padx =10,pady = 10) Label(self.logf,text = 'Username: ',font = ('',20),pady=5,padx=5).grid(sticky = W) Entry(self.logf,textvariable = self.username,bd = 5,font = ('',15)).grid(row=0,column=1) Label(self.logf,text = 'Password: ',font = ('',20),pady=5,padx=5).grid(sticky = W) Entry(self.logf,textvariable = self.password,bd = 5,font = ('',15),show = '*').grid(row=1,column=1) Button(self.logf,text = ' Login ',bd = 1 ,font = ('',15),padx=5,pady=5,command=self.login, bg="green").grid() Button(self.logf,text = ' Create Account ',bd = 1 ,font = ('',15),padx=5,pady=5,command=self.cr, bg="red").grid(row=2,column=1) self.logf.pack() self.crf = Frame(self.master, padx =10,pady = 10) Label(self.crf,text = 'Username: ',font = ('',20),pady=5,padx=5).grid(sticky = W) Entry(self.crf,textvariable = self.n_username,bd = 5,font = ('',15)).grid(row=0,column=1) Label(self.crf,text = 'Password: ',font = ('',20),pady=5,padx=5).grid(sticky = W) Entry(self.crf,textvariable = self.n_password,bd = 5,font = ('',15),show = '*').grid(row=1,column=1) Button(self.crf,text = 'Create Account',bd = 1 ,font = ('',15),padx=5,pady=5,command=self.new_user, bg="green").grid() Button(self.crf,text = 'Go to Login',bd = 1 ,font = ('',15),padx=5,pady=5,command=self.log, bg="red").grid(row=2,column=1) class travel: def __init__(self,root): self.root = root self.root.title("Taxi Booking System") self.root.geometry(geometry) self.root.configure(background='black') self.root.resizable(width=False, height=False) DateofOrder=StringVar() DateofOrder.set(time.strftime(" %d / %m / %Y ")) Receipt_Ref=StringVar() PaidTax=StringVar() SubTotal=StringVar() TotalCost=StringVar() var1=IntVar() var2=IntVar() var3=IntVar() var4=IntVar() journeyType=IntVar() carType=IntVar() varl1=StringVar() varl2=StringVar() varl3=StringVar() reset_counter=0 Firstname=StringVar() Surname=StringVar() Address=StringVar() Postcode=StringVar() Mobile=StringVar() Telephone=StringVar() Email=StringVar() CabTax=StringVar() Km=StringVar() Travel_Ins=StringVar() Luggage=StringVar() Receipt=StringVar() Standard=StringVar() FordGalaxy=StringVar() FordMondeo=StringVar() CabTax.set("0") Km.set("0") Travel_Ins.set("0") Luggage.set("0") Standard.set("0") FordGalaxy.set("0") FordMondeo.set("0") #===============Define Function================== def Reset(): iMs = ms.askyesno("Prompt!","Do you want to book?") if iMs > 0: ms.showinfo("Prompt!","Booking Successful!!! Thank you for using our service") def Cab_Tax(): global Item1 if var1.get() == 1: self.txtCabTax.configure(state = NORMAL) Item1=float(50) CabTax.set("Rs " + str(Item1)) elif var1.get() == 0: self.txtCabTax.configure(state=DISABLED) CabTax.set("0") Item1=0 def Kilo(): if var2.get() == 0: self.txtKm.configure(state=DISABLED) Km.set("0") elif var2.get() == 1 and varl1.get() != "" and varl2.get() != "": self.txtKm.configure(state=NORMAL) if varl1.get() == "Love Boulevard": switch ={"Cedar Street": 10,"Station Row": 8,"Arcade Lane":6,"Love Boulevard": 0} Km.set(switch[varl2.get()]) elif varl1.get() == "Cedar Street": switch ={"Cedar Street": 0,"Station Row": 2,"Arcade Lane":5,"Love Boulevard": 10} Km.set(switch[varl2.get()]) elif varl1.get() == "Station Row": switch ={"Cedar Street": 2,"Station Row": 0,"Arcade Lane":3,"Love Boulevard": 8} Km.set(switch[varl2.get()]) elif varl1.get() == "Arcade Lane": switch ={"Cedar Street": 5,"Station Row": 3,"Arcade Lane":0,"Love Boulevard": 6} Km.set(switch[varl2.get()]) def Travelling(): global Item3 if var3.get() == 1: self.txtTravel_Ins.configure(state = NORMAL) Item3=float(10) Travel_Ins.set("Rs " + str(Item3)) elif var3.get() == 0: self.txtTravel_Ins.configure(state = DISABLED) Travel_Ins.set("0") Item3=0 def Total_Paid(): if journeyType.get()==1: Item2=Km.get() Cost_of_fare = (Item1+(float(Item2)*2)+Item3+Item4) Tax = "Rs " + str('%.2f'%((Cost_of_fare) *0.09)) ST = "Rs " + str('%.2f'%((Cost_of_fare))) TT = "Rs " + str('%.2f'%(Cost_of_fare+((Cost_of_fare)*0.9))) elif journeyType.get()==2: Item2=Km.get() Cost_of_fare = (Item1+(float(Item2)*2)*1.5+Item3+Item4) Tax = "Rs " + str('%.2f'%((Cost_of_fare) *0.09)) ST = "Rs " + str('%.2f'%((Cost_of_fare))) TT = "Rs " + str('%.2f'%(Cost_of_fare+((Cost_of_fare)*0.9))) else: Item2=Km.get() Cost_of_fare = (Item1+(float(Item2)*3)*2+Item3+Item4) Tax = "Rs " + str('%.2f'%((Cost_of_fare) *0.09)) ST = "Rs " + str('%.2f'%((Cost_of_fare))) TT = "Rs " + str('%.2f'%(Cost_of_fare+((Cost_of_fare)*0.9))) PaidTax.set(Tax) SubTotal.set(ST) TotalCost.set(TT) #===================mainframe================================ MainFrame=Frame(self.root) MainFrame.pack(fill=BOTH,expand=True) Tops = Frame(MainFrame, bd=10, bg="black", width=800,relief=RIDGE) Tops.pack(side=TOP,fill=BOTH) self.lblTitle=Label(Tops,font=('MV Boli', 30,'bold'),text="\t Taxi Booking System ", bg="black", fg="white", bd=10, anchor='w') self.lblTitle.grid() #=====================customerframedetail================================= CustomerDetailsFrame=LabelFrame(MainFrame, width=400,height=400,bd=20, pady=5, relief=RIDGE) CustomerDetailsFrame.pack(side=BOTTOM,fill=BOTH,expand=True) FrameDetails=Frame(CustomerDetailsFrame, width=480,height=300,bd=10, relief=RIDGE) FrameDetails.pack(side=LEFT,fill=BOTH,expand=True) CustomerName=LabelFrame(FrameDetails, width=150,height=250,bd=10, font=('arial',12,'bold'),text="Customer Info", relief=RIDGE) CustomerName.grid(row=0,column=0) TravelFrame = LabelFrame(FrameDetails,bd=10, width=300,height=250, font=('arial',12,'bold'),text="Booking Detail", relief=RIDGE) TravelFrame.grid(row=0,column=1) CostFrame = LabelFrame(FrameDetails,width=300,height=150,bd=5,relief=FLAT) CostFrame.grid(row=1,column=1) #=====================book=================== Receipt_BottonFrame=LabelFrame(CustomerDetailsFrame,bd=10, width=350,height=300, relief=SUNKEN) Receipt_BottonFrame.pack(side=RIGHT,fill=BOTH,expand=True) Receipt_BottonFrame.picture = PhotoImage(file="./thanku.png") Receipt_BottonFrame.label = Label(Receipt_BottonFrame, image=Receipt_BottonFrame.picture) Receipt_BottonFrame.label.pack() #================CustomerName========================= self.lblFirstname=Label(CustomerName,font=('arial',14,'bold'),text="Firstname",bd=7) self.lblFirstname.grid(row=0,column=0,sticky=W) self.txtFirstname=Entry(CustomerName,font=('arial',14,'bold'),textvariable=Firstname,bd=7,insertwidth=2,justify=RIGHT) self.txtFirstname.grid(row=0,column=1) self.lblSurname=Label(CustomerName,font=('arial',14,'bold'),text="Surname",bd=7) self.lblSurname.grid(row=1,column=0,sticky=W) self.txtSurname=Entry(CustomerName,font=('arial',14,'bold'),textvariable=Surname,bd=7,insertwidth=2,justify=RIGHT) self.txtSurname.grid(row=1,column=1,sticky=W) self.lblAddress=Label(CustomerName,font=('arial',14,'bold'),text="Address",bd=7) self.lblAddress.grid(row=2,column=0,sticky=W) self.txtAddress=Entry(CustomerName,font=('arial',14,'bold'),textvariable=Address,bd=7,insertwidth=2,justify=RIGHT) self.txtAddress.grid(row=2,column=1) self.lblPostcode=Label(CustomerName,font=('arial',14,'bold'),text="Postcode",bd=7) self.lblPostcode.grid(row=3,column=0,sticky=W) self.txtPostcode=Entry(CustomerName,font=('arial',14,'bold'),textvariable=Postcode,bd=7,insertwidth=2,justify=RIGHT) self.txtPostcode.grid(row=3,column=1) self.lblMobile=Label(CustomerName,font=('arial',14,'bold'),text="Mobile",bd=7) self.lblMobile.grid(row=5,column=0,sticky=W) self.txtMobile=Entry(CustomerName,font=('arial',14,'bold'),textvariable=Mobile,bd=7,insertwidth=2,justify=RIGHT) self.txtMobile.grid(row=5,column=1) self.lblEmail=Label(CustomerName,font=('arial',14,'bold'),text="Email",bd=7) self.lblEmail.grid(row=6,column=0,sticky=W) self.txtEmail=Entry(CustomerName,font=('arial',14,'bold'),textvariable=Email,bd=7,insertwidth=2,justify=RIGHT) self.txtEmail.grid(row=6,column=1) #Cab Information self.lblPickup=Label(TravelFrame,font=('arial',14,'bold'),text="Pickup",bd=7) self.lblPickup.grid(row=0,column=0,sticky=W) self.cboPickup =ttk.Combobox(TravelFrame, textvariable = varl1 , state='readonly', font=('arial',20,'bold'), width=14) self.cboPickup['value']=('','Love Boulevard','Arcade Lane','Station Row','Cedar Street') self.cboPickup.current(0) self.cboPickup.grid(row=0,column=1) self.lblDrop=Label(TravelFrame,font=('arial',14,'bold'),text="Drop",bd=7) self.lblDrop.grid(row=1,column=0,sticky=W) self.cboDrop =ttk.Combobox(TravelFrame, textvariable = varl2 , state='readonly', font=('arial',20,'bold'), width=14) self.cboDrop['value']=('','Cedar Street','Station Row','Love Boulevard','Arcade Lane') self.cboDrop.current(0) self.cboDrop.grid(row=1,column=1) self.lblPooling=Label(TravelFrame,font=('arial',14,'bold'),text="Pooling",bd=7) self.lblPooling.grid(row=2,column=0,sticky=W) self.cboPooling =ttk.Combobox(TravelFrame, textvariable = varl3 , state='readonly', font=('arial',20,'bold'), width=14) self.cboPooling['value']=('','1','2','3','4') self.cboPooling.current(1) self.cboPooling.grid(row=2,column=1) #Cab Information self.chkCabTax=Checkbutton(TravelFrame,text="Base Charge *",variable = var1, onvalue=1, offvalue=0,font=('arial',16,'bold'),command=Cab_Tax).grid(row=3, column=0, sticky=W) self.txtCabTax=Label(TravelFrame,font=('arial',14,'bold'),textvariable=CabTax,bd=6,width=18,bg="white",state= DISABLED,justify=RIGHT,relief=SUNKEN) self.txtCabTax.grid(row=3,column=1) self.chkKm=Checkbutton(TravelFrame,text="Distance(KMs) *",variable = var2, onvalue=1, offvalue=0,font=('arial',16,'bold'),command=Kilo).grid(row=4, column=0, sticky=W) self.txtKm=Label(TravelFrame,font=('arial',14,'bold'),textvariable=Km,bd=6,width=18,bg="white",state= DISABLED,justify=RIGHT,relief=SUNKEN,highlightthickness=0) self.txtKm.grid(row=4,column=1) self.chkTravel_Ins=Checkbutton(TravelFrame,text="Travelling Insurance *",variable = var3, onvalue=1, offvalue=0,font=('arial',16,'bold'),command=Travelling).grid(row=5, column=0, sticky=W) self.txtTravel_Ins=Label(TravelFrame,font=('arial',14,'bold'),textvariable=Travel_Ins,bd=6,width=18,bg="white",state= DISABLED,justify=RIGHT,relief=SUNKEN) self.txtTravel_Ins.grid(row=5,column=1) #payment information self.lblPaidTax=Label(CostFrame,font=('arial',14,'bold'),text="Paid Tax\t\t",bd=7) self.lblPaidTax.grid(row=0,column=1,sticky=W) self.txtPaidTax = Label(CostFrame,font=('arial',14,'bold'),textvariable=PaidTax,bd=7, width=10, justify=RIGHT,bg="white",relief=SUNKEN) self.txtPaidTax.grid(row=0,column=2) self.lblSubTotal=Label(CostFrame,font=('arial',14,'bold'),text="Sub Total",bd=7) self.lblSubTotal.grid(row=1,column=1,sticky=W) self.txtSubTotal = Label(CostFrame,font=('arial',14,'bold'),textvariable=SubTotal,bd=7, width=10, justify=RIGHT,bg="white",relief=SUNKEN) self.txtSubTotal.grid(row=1,column=2) self.lblTotalCost=Label(CostFrame,font=('arial',14,'bold'),text="Total Cost",bd=7) self.lblTotalCost.grid(row=2,column=1,sticky=W) self.txtTotalCost = Label(CostFrame,font=('arial',14,'bold'),textvariable=TotalCost,bd=7, width=10, justify=RIGHT,bg="white",relief=SUNKEN) self.txtTotalCost.grid(row=2,column=2) self.btnTotal = Button(CostFrame,padx=18,bd=3,font=('arial',11,'bold'),width = 2,text='Total',command=Total_Paid, bg="black", fg="white").grid(row=2,column=3) self.btnReset = Button(CostFrame,padx=18,bd=3,font=('arial',11,'bold'),width = 2,text='Book',command=Reset, bg="yellow", fg ="black").grid(row=2,column=4) if __name__=='__main__': root = Tk() w = 1150 h = 650 geometry="%dx%d+%d+%d"%(w,h,50,0) root.geometry("500x300+320+200") root.title('Login Form') application = user(root) root.mainloop()
Output for Taxi Booking System
Image Output:
Video Output:
Conclusion
In this article, we have developed a very simple Car or Taxi or Cab Booking System in Python which has features like SignUp, login, Booking, etc. We recommend you make this app more functional yet more powerful by adding some more features that may include viewing history, rebooking from history, contacting drivers, etc. Hope you find this article helpful.
Thank you for visiting our website.
Also Read:
- Create your own ChatGPT with Python
- SQLite | CRUD Operations in Python
- Event Management System Project in Python
- Ticket Booking and Management in Python
- Hostel Management System Project in Python
- Sales Management System Project in Python
- Bank Management System Project in C++
- Python Download File from URL | 4 Methods
- Python Programming Examples | Fundamental Programs in Python
- Spell Checker in Python
- Portfolio Management System in Python
- Stickman Game in Python
- Contact Book project in Python
- Loan Management System Project in Python
- Cab Booking System in Python
- Brick Breaker Game in Python
- Tank game in Python
- GUI Piano in Python
- Ludo Game in Python
- Rock Paper Scissors Game in Python
- Snake and Ladder Game in Python
- Puzzle Game in Python
- Medical Store Management System Project in Python
- Creating Dino Game in Python
- Tic Tac Toe Game in Python
- Test Typing Speed using Python App
- Scientific Calculator in Python
- GUI To-Do List App in Python Tkinter
- Scientific Calculator in Python using Tkinter
- GUI Chat Application in Python Tkinter