
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



