Python Vehicle Parking System Project
Python Vehicle Parking System Project
PythonProgramming
Project
Mentor: Jenita
Delivered By
[Link]
ABSTRACT
hisvehicleparkingsystemprojectinPythonfocusesmainlyondealing
T
with customer’s parking details with their number, and slot. Also, the
system allows inserting details of vehicle ownersincludingtheircontact
number, vehicle number, and vehicle category. But here, the system
automatically sets a slot for reservation after inserting vehicle details
until the vehicle gets out. Talking about parking slots, the system
indicates empty and occupied slots with green and red color
respectively. In an overview of this app, the system displays all the
parked vehicles under the managevehiclessectionwheretheusercan
canceltheparkingonceit’s[Link]addition,thesystemdisplaysallthe
parking history to date for both two and four-wheelers. Besides, the
admin must set the total number of parking slots for both two and
four-wheelers during the installation. On the other hand, the system
captures the current time while inserting the vehicle record for parking,
and then calculates the total time after cancelling the parking records.
With all these time stamps, the system displays it under the history
section with information such as customer’s name,contactinfo,vehicle
number,andparking[Link]butnotleast,acleanandsimpleGUIis
presented with simple color combinations for greater user experience
while using this vehicle parking management system in Python. For its
UI elements, a cross-platform GUI toolkit Qt; PyQT is on board.
Presenting a new vehicle parking system in Python project which
includesauserpanelthatcontainsalltheessentialfeaturestofollowup,
and a knowledgeable resource for learning purposes.
PROGRAM : -
[Link]
import
sys
import
os
from
InstallWindow
import
InstallWindow
from
LoginWindow
import
LoginScreen
from
PyQt5
.
QtWidgets
import
QApplication
,
QSplashScreen
,
QLabel
from
PyQt5
.
QtGui
import
QPixmap
from
PyQt5
.
QtCore
import
Qt
,
QTimer
class
MainScreen
():
def
showSplashScreen
(
self
):
self
.
pix
=
Q
Pixmap
(
"slash_img.jpg"
)
self
.
splassh
=
QSplashScreen
(
self
.
pix
,
Qt
.WindowStaysOnTopHint)
self
.
splassh
.
show
()
def
showSetupWindow
():
mainScreen
.
splassh
.
close
()
installWindow
.
show
()
def
showLoginWindow
():
mainScreen
.
splassh
.
close
()
login
.
showLoginScreen
()
app
=
Q
Application
(
sys
.
argv
)
login
=
LoginScreen
()
mainScreen
=
MainScreen
()
mainScreen
.
showSplashScreen
()
installWindow
=
InstallWindow
()
if
os
.
path
.
exists
(
"./[Link]"
):
QTimer
.
singleShot
(
3000
,
showLoginWindow
)
else
:
QTimer
.
singleShot
(
3000
,
showSetupWindow
)
sys
.
e
xit
(
app
.
e
xec_
())
[Link]
from
PyQt5
.
QtWidgets
import
QWidget
,
QVBoxLayout
,
QPushButton
,
QLabel
,
QLineEdit
,
QApplication
import
sys
from
DataBaseOperation
import
DBOperation
from
HomeWindow
import
HomeScreen
class
LoginScreen
(
QWidget
):
def
__init__
(
self
):
super
().
__init__
()
self
.
setWindowTitle
(
"Admin Login"
)
self
.
resize
(
300
,
1
00
)
layout
=
QVBoxLayout
()
label_username
=
QLabel
(
"Username : "
)
label_username
.
setStyleSheet
(
"color:#000;padding:8px
0px;font-size:18px;"
)
self
.
input_username
=
QLineEdit
()
self
.
input_username
.
setStyleSheet
(
"padding:5px;font-size:17px"
)
label_password
=
QLabel
(
"Password : "
)
label_password
.
setStyleSheet
(
"color:#000;padding:8px
0px;font-size:18px;"
)
self
.
error_msg
=
QLabel
()
self
.
error_msg
.
setStyleSheet
(
"color:red;padding:8px
0px;font-size:18px;text-align:center"
)
self
.
input_password
=
QLineEdit
()
self
.
input_password
.
setStyleSheet
(
"padding:5px;font-size:17px"
)
btn_login
=
QPushButton
(
"Login"
)
btn_login
.
setStyleSheet
(
"padding:5px;font-size:20px;background:green;co
lor:#fff"
)
layout
.
addWidget
(
label_username
)
layout
.
addWidget
(
self
.
input_username
)
layout
.
addWidget
(
label_password
)
layout
.
addWidget
(
self
.
input_password
)
layout
.
addWidget
(
btn_login
)
layout
.
addWidget
(
self
.
error_msg
)
layout
.
addStretch
()
btn_login
.
clicked
.
connect
(
self
.
showHome
)
self
.
setLayout
(
layout
)
def
showLoginScreen
(
self
):
self
.
show
()
def
showHome
(
self
):
if
self
.
input_username
.
text
()
==
""
:
self
.
error_msg
.
setText
(
"Please Enter Username"
)
return
if
self
.
input_password
.
text
()
==
""
:
self
.
error_msg
.
setText
(
"Please Enter Password"
)
return
dboperation
=
DBOperation
()
result
=
dboperation
.
doAdminLogin
(
self
.
input_username
.
text
(),
self
.
input_p
assword
.
text
())
if
result
:
self
.
error_msg
.
setText
(
"Login Successful"
)
self
.
close
()
self
.
home
=
HomeScreen
()
self
.
home
.
show
()
else
:
self
.
error_msg
.
setText
(
"Invalid Login Details"
)
[Link]
from
PyQt5
.
QtWidgets
import
QWidget
,
QPushButton
,
QVBoxLayout
,
QLabel
,
QLineEdit
from
LoginWindow
import
LoginScreen
import
json
from
DataBaseOperation
import
DBOperation
class
InstallWindow
(
QWidget
):
def
__init__
(
self
):
super
().
__init__
()
self
.
setWindowTitle
(
"Install Vehical Parking System"
)
self
.
resize
(
400
,
2
00
)
layout
=
QVBoxLayout
()
label_db_name
=
QLabel
(
"Database Name : "
)
label_db_name
.
setStyleSheet
(
"color:#000;padding:8px
0px;font-size:18px;"
)
label_db_username
=
QLabel
(
"Database Username
: "
)
label_db_username
.
setStyleSheet
(
"color:#000;padding:8px
0px;font-size:18px;"
)
label_db_password
=
QLabel
(
"Database Password
: "
)
label_db_password
.
setStyleSheet
(
"color:#000;padding:8px
0px;font-size:18px;"
)
label_admin_username
=
QLabel
(
"Admin Username
: "
)
label_admin_username
.
setStyleSheet
(
"color:#000;padding:8px
0px;font-size:18px;"
)
label_admin_password
=
QLabel
(
"Admin Password
: "
)
label_admin_password
.
setStyleSheet
(
"color:#000;padding:8px
0px;font-size:18px;"
)
label_no_of_two_seater
=
QLabel
(
"No of Two Wheeler
Space : "
)
label_no_of_two_seater
.
setStyleSheet
(
"color:#000;padding:8px
0px;font-size:18px;"
)
label_no_of_four_seater
=
QLabel
(
"No. of Four
Wheeler Space : "
)
label_no_of_four_seater
.
setStyleSheet
(
"color:#000;padding:8px
0px;font-size:18px;"
)
self
.
input_db_name
=
QLineEdit
()
self
.
input_db_name
.
setText
(
"vehicle_parking"
)
self
.
input_db_name
.
setStyleSheet
(
"padding:5px;font-size:17px"
)
self
.
input_db_username
=
QLineEdit
()
self
.
input_db_username
.
setText
(
"vehicle"
)
self
.
input_db_username
.
setStyleSheet
(
"padding:5px;font-size:17px"
)
self
.
input_db_password
=
QLineEdit
()
self
.
input_db_password
.
setText
(
"vehicle_password"
)
self
.
input_db_password
.
setStyleSheet
(
"padding:5px;font-size:17px"
)
self
.
input_admin_username
=
QLineEdit
()
self
.
input_admin_username
.
setStyleSheet
(
"padding:5px;font-size:17px"
)
self
.
input_admin_password
=
QLineEdit
()
self
.
input_admin_password
.
setStyleSheet
(
"padding:5px;font-size:17px"
)
self
.
input_two_wheeler
=
QLineEdit
()
self
.
input_two_wheeler
.
setStyleSheet
(
"padding:5px;font-size:17px"
)
self
.
input_four_wheeler
=
QLineEdit
()
self
.
input_four_wheeler
.
setStyleSheet
(
"padding:5px;font-size:17px"
)
buttonsave
=
QPushButton
(
"save config"
)
buttonsave
.
setStyleSheet
(
"padding:5px;font-size:17px;background:green;c
olor:#fff"
)
self
.
error_label
=
QLabel
()
self
.
error_label
.
setStyleSheet
(
"color:red"
)
layout
.
addWidget
(
label_db_name
)
layout
.
addWidget
(
self
.
input_db_name
)
layout
.
addWidget
(
label_db_username
)
layout
.
addWidget
(
self
.
input_db_username
)
layout
.
addWidget
(
label_db_password
)
layout
.
addWidget
(
self
.
input_db_password
)
layout
.
addWidget
(
label_admin_username
)
layout
.
addWidget
(
self
.
input_admin_username
)
layout
.
addWidget
(
label_admin_password
)
layout
.
addWidget
(
self
.
input_admin_password
)
layout
.
addWidget
(
label_no_of_two_seater
)
layout
.
addWidget
(
self
.
input_two_wheeler
)
layout
.
addWidget
(
label_no_of_four_seater
)
layout
.
addWidget
(
self
.
input_four_wheeler
)
layout
.
addWidget
(
buttonsave
)
layout
.
addWidget
(
self
.
error_label
)
buttonsave
.
clicked
.
connect
(
self
.
showStepInfo
)
self
.
setLayout
(
layout
)
def
showStepInfo
(
self
):
if
self
.
input_db_name
.
text
()
==
""
:
self
.
error_label
.
setText
(
"Please Enter DB Name"
)
return
if
self
.
input_db_username
.
text
()
==
""
:
self
.
error_label
.
setText
(
"Please Enter
DB Username"
)
return
if
self
.
input_db_password
.
text
()
==
""
:
self
.
error_label
.
setText
(
"Please Enter
DB Password"
)
return
if
self
.
input_admin_username
.
text
()
==
""
:
self
.
error_label
.
setText
(
"Please Enter
Admin Username"
)
return
if
self
.
input_admin_password
.
text
()
==
""
:
self
.
error_label
.
setText
(
"Please Enter
Admin Password"
)
return
if
self
.
input_two_wheeler
.
text
()
==
""
:
self
.
error_label
.
setText
(
"Please Enter
Two Wheeler Space"
)
return
if
self
.
input_four_wheeler
.
text
()
==
""
:
self
.
error_label
.
setText
(
"Please Enter
Four Wheeler Space"
)
return
data
=
{
"
username"
:
self
.
input_db_username
.
text
(),
"database"
:
self
.
input_db
_name
.
text
(),
"password"
:
s
elf
.
input_db_password
.
text
()}
file
=
open
(
"./[Link]"
,
"w"
)
file
.
write
(
json
.
dumps
(
data
))
file
.
close
()
dbOperation
=
DBOperation
()
dbOperation
.
CreateTables
()
dbOperation
.
InsertAdmin
(
self
.
input_admin_username
.
text
(),
self
.
input_adm
in_password
.
text
())
dbOperation
.
InsertOneTimeData
(
int
(
self
.
input_two_wheeler
.
text
()),
int
(
se
lf
.
input_four_wheeler
.
text
()))
self
.
close
()
self
.
login
=
LoginScreen
()
self
.
login
.
showLoginScreen
()
print
(
"Save"
)
[Link]
from
PyQt5
.
QtWidgets
import
QWidget
,
QMainWindow
,
QPushButton
,
QLineEdit
,
QLabel
,
QVBoxLayout
,
QHBoxLayou
t
,
Q
Frame
,
QGridLayout
,
QComboBox
,
QTableWidget
,
QTableWidgetItem
from
DataBaseOperation
import
DBOperation
from
PyQt5
.
QtWidgets
import
QHeaderView
,
qApp
import
PyQt5
.
QtGui
class
HomeScreen
(
QMainWindow
):
def
__init__
(
self
):
super
().
__init__
()
self
.
setWindowTitle
(
"Home"
)
self
.
dbOperation
=
DBOperation
()
widget
=
QWidget
()
widget
.
setStyleSheet
(
"background:#000"
)
layout_horizontal
=
QHBoxLayout
()
menu_vertical_layout
=
QVBoxLayout
()
self
.
btn_home
=
QPushButton
(
"Home"
)
self
.
btn_add
=
QPushButton
(
"Add Vehicle"
)
self
.
btn_manage
=
QPushButton
(
"Manage Vehicle"
)
self
.
btn_history
=
QPushButton
(
"History"
)
menu_vertical_layout
.
setContentsMargins
(
0
,
0
,
0
,
0
)
menu_vertical_layout
.
setSpacing
(
0
)
self
.
btn_home
.
setStyleSheet
(
"width:200px;height:160px;font-size:20px;ba
ckground:#1A3668;color:#fff;font-weight:bold;border:1px solid white"
)
self
.
btn_add
.
setStyleSheet
(
"width:200px;height:160px;font-size:20px;bac
kground:#A4866F;color:#fff;font-weight:bold;border:1px solid white"
)
self
.
btn_manage
.
setStyleSheet
(
"width:200px;height:160px;font-size:20px;
background:#A4866F;color:#fff;font-weight:bold;border:1px solid white"
)
self
.
btn_history
.
setStyleSheet
(
"width:200px;height:160px;font-size:20px
;background:#A4866F;color:#fff;font-weight:bold;border:1px solid
white"
)
self
.
btn_home
.
clicked
.
connect
(
self
.
showHome
)
self
.
btn_add
.
clicked
.
connect
(
self
.
showAdd
)
self
.
btn_manage
.
c
licked
.
connect
(
self
.
showManage
)
self
.
btn_history
.
clicked
.
connect
(
self
.
showHistory
)
menu_frame
=
QFrame
()
menu_vertical_layout
.
addWidget
(
self
.
btn_home
)
menu_vertical_layout
.
addWidget
(
self
.
btn_add
)
menu_vertical_layout
.
addWidget
(
self
.
btn_manage
)
menu_vertical_layout
.
addWidget
(
self
.
btn_history
)
menu_vertical_layout
.
addStretch
()
menu_frame
.
setLayout
(
menu_vertical_layout
)
#menu_frame.setMinimumWidth(200)
#menu_frame.setMaximumHeight(200)
parent_vertical
=
QVBoxLayout
()
parent_vertical
.
setContentsMargins
(
0
,
0
,
0
,
0
)
self
.
vertical_1
=
Q
VBoxLayout
()
self
.
addHomePageData
()
self
.
vertical_2
=
Q
VBoxLayout
()
self
.
vertical_2
.
s
etContentsMargins
(
0
,
0
,
0
,
0
)
self
.
addAddStudentPage
()
self
.
vertical_3
=
Q
VBoxLayout
()
self
.
vertical_3
.
s
etContentsMargins
(
0
,
0
,
0
,
0
)
self
.
addManagePage
()
self
.
vertical_4
=
Q
VBoxLayout
()
self
.
addHistoryPage
()
self
.
frame_1
=
QFrame
()
self
.
frame_1
.
setMinimumWidth
(
self
.
width
())
self
.
frame_1
.
setMaximumWidth
(
self
.
width
())
self
.
frame_1
.
setMaximumHeight
(
self
.
width
())
self
.
frame_1
.
setMaximumHeight
(
self
.
width
())
self
.
frame_1
.
setLayout
(
self
.
vertical_1
)
self
.
frame_2
=
QFrame
()
self
.
frame_2
.
setLayout
(
self
.
vertical_2
)
self
.
frame_3
=
QFrame
()
self
.
frame_3
.
setLayout
(
self
.
vertical_3
)
self
.
frame_4
=
QFrame
()
self
.
frame_4
.
setLayout
(
self
.
vertical_4
)
parent_vertical
.
addWidget
(
self
.
frame_1
)
parent_vertical
.
addWidget
(
self
.
frame_2
)
parent_vertical
.
addWidget
(
self
.
frame_3
)
parent_vertical
.
addWidget
(
self
.
frame_4
)
layout_horizontal
.
addWidget
(
menu_frame
)
layout_horizontal
.
addLayout
(
parent_vertical
)
layout_horizontal
.
setContentsMargins
(
0
,
0
,
0
,
0
)
parent_vertical
.
setContentsMargins
(
0
,
0
,
0
,
0
)
parent_vertical
.
addStretch
()
#menu_vertical_layout.addStretch()
layout_horizontal
.
addStretch
()
widget
.
setLayout
(
layout_horizontal
)
self
.
frame_1
.
show
()
self
.
frame_2
.
hide
()
self
.
frame_3
.
hide
()
self
.
frame_4
.
hide
()
self
.
setCentralWidget
(
widget
)
def
showHistory
(
self
):
self
.
btn_home
.
setStyleSheet
(
"width:200px;height:160px;font-size:20px;ba
ckground:#A4866F;color:#fff;font-weight:bold;border:1px solid white"
)
self
.
btn_add
.
setStyleSheet
(
"width:200px;height:160px;font-size:20px;bac
kground:#A4866F;color:#fff;font-weight:bold;border:1px solid white"
)
self
.
btn_manage
.
setStyleSheet
(
"width:200px;height:160px;font-size:20px;
background:#A4866F;color:#fff;font-weight:bold;border:1px solid white"
)
self
.
btn_history
.
setStyleSheet
(
"width:200px;height:160px;font-size:20px
;background:#1A3668;color:#fff;font-weight:bold;border:1px solid
white"
)
self
.
frame_1
.
hide
()
self
.
frame_2
.
hide
()
self
.
frame_3
.
hide
()
self
.
frame_4
.
show
()
def
showManage
(
self
):
self
.
btn_home
.
setStyleSheet
(
"width:200px;height:160px;font-size:20px;ba
ckground:#A4866F;color:#fff;font-weight:bold;border:1px solid white"
)
self
.
btn_add
.
setStyleSheet
(
"width:200px;height:160px;font-size:20px;bac
kground:#A4866F;color:#fff;font-weight:bold;border:1px solid white"
)
self
.
btn_manage
.
setStyleSheet
(
"width:200px;height:160px;font-size:20px;
background:#1A3668;color:#fff;font-weight:bold;border:1px solid white"
)
self
.
btn_history
.
setStyleSheet
(
"width:200px;height:160px;font-size:20px
;background:#A4866F;color:#fff;font-weight:bold;border:1px solid
white"
)
self
.
frame_1
.
hide
()
self
.
frame_2
.
hide
()
self
.
frame_4
.
hide
()
self
.
frame_3
.
show
()
def
showAdd
(
self
):
self
.
btn_home
.
setStyleSheet
(
"width:200px;height:160px;font-size:20px;ba
ckground:#A4866F;color:#fff;font-weight:bold;border:1px solid white"
)
self
.
btn_add
.
setStyleSheet
(
"width:200px;height:160px;font-size:20px;bac
kground:#1A3668;color:#fff;font-weight:bold;border:1px solid white"
)
self
.
btn_manage
.
setStyleSheet
(
"width:200px;height:160px;font-size:20px;
background:#A4866F;color:#fff;font-weight:bold;border:1px solid white"
)
self
.
btn_history
.
setStyleSheet
(
"width:200px;height:160px;font-size:20px
;background:#A4866F;color:#fff;font-weight:bold;border:1px solid
white"
)
self
.
frame_1
.
hide
()
self
.
frame_3
.
hide
()
self
.
frame_4
.
hide
()
self
.
frame_2
.
show
()
def
showHome
(
self
):
self
.
btn_home
.
setStyleSheet
(
"width:200px;height:160px;font-size:20px;ba
ckground:#1A3668;color:#fff;font-weight:bold;border:1px solid white"
)
self
.
btn_add
.
setStyleSheet
(
"width:200px;height:160px;font-size:20px;bac
kground:#A4866F;color:#fff;font-weight:bold;border:1px solid white"
)
self
.
btn_manage
.
setStyleSheet
(
"width:200px;height:160px;font-size:20px;
background:#A4866F;color:#fff;font-weight:bold;border:1px solid white"
)
self
.
btn_history
.
setStyleSheet
(
"width:200px;height:160px;font-size:20px
;background:#A4866F;color:#fff;font-weight:bold;border:1px solid
white"
)
self
.
frame_2
.
hide
()
self
.
frame_3
.
hide
()
self
.
frame_4
.
hide
()
self
.
frame_1
.
show
()
def
refreshHome
(
self
):
while
self
.
gridLayout
.
count
():
child
=
self
.
gridLayout
.
takeAt
(
0
)
if
child
.
widget
():
child
.
widget
().
deleteLater
()
row
=
0
i
=
0
alldata
=
self
.
dbOperation
.
getSlotSpace
()
for
data
in
alldata
:
label
=
QPushButton
(
"Slot "
+
str
(
data
[
0
])
+
"
\n
"+
str
(
data
[
1
]))
if
data
[
3
]
==
1
:
label
.
setStyleSheet
(
"background-color:green;color:white;padding:5px;wid
th:100px;height:100px;border:1px solid
white;text-align:center;font-weight:bold"
)
else
:
label
.
setStyleSheet
(
"background-color:red;color:white;padding:5px;width
:100px;height:100px;border:1px solid
white;text-align:center;font-weight:bold"
)
if
i%
5
==
0
:
i
=
0
row
=
row
+
1
self
.
gridLayout
.
addWidget
(
label
,
row
,
i
)
i
=
i
+
1
def
addHomePageData
(
self
):
self
.
vertical_1
.
s
etContentsMargins
(
0
,
0
,
0
,
0
)
button
=
QPushButton
(
"Refresh Slot"
)
button
.
setStyleSheet
(
"color:#fff;padding:8px
0px;font-size:20px;background:#696969;border:1px solid white"
)
button
.
clicked
.
connect
(
self
.
refreshHome
)
vertical_layout
=
QVBoxLayout
()
vertical_layout
.
setContentsMargins
(
0
,
0
,
0
,
0
)
frame
=
QFrame
()
horizontal
=
QHBoxLayout
()
horizontal
.
setContentsMargins
(
0
,
0
,
0
,
0
)
vertical_layout
.
addLayout
(
horizontal
)
alldata
=
self
.
dbOperation
.
getSlotSpace
()
self
.
gridLayout
=
Q
GridLayout
()
self
.
gridLayout
.
s
etContentsMargins
(
0
,
0
,
0
,
0
)
self
.
gridLayout
.
s
etHorizontalSpacing
(
0
)
self
.
gridLayout
.
s
etVerticalSpacing
(
0
)
vertical_layout
.
addWidget
(
button
)
vertical_layout
.
addLayout
(
self
.
gridLayout
)
row
=
0
i
=
0
for
data
in
alldata
:
label
=
QPushButton
(
"Slot "
+
str
(
data
[
0
])
+
"
\n
"+
str
(
data
[
1
]))
if
data
[
3
]
==
1
:
label
.
setStyleSheet
(
"background-color:green;color:white;padding:5px;wid
th:100px;height:100px;border:1px solid
white;text-align:center;font-weight:bold"
)
else
:
label
.
setStyleSheet
(
"background-color:red;color:white;padding:5px;width
:100px;height:100px;border:1px solid
white;text-align:center;font-weight:bold"
)
if
i%
5
==
0
:
i
=
0
row
=
row
+
1
self
.
gridLayout
.
addWidget
(
label
,
row
,
i
)
i
=
i
+
1
frame
.
setLayout
(
vertical_layout
)
self
.
vertical_1
.
a
ddWidget
(
frame
)
self
.
vertical_1
.
a
ddStretch
()
def
addAddStudentPage
(
self
):
layout
=
QVBoxLayout
()
frame
=
QFrame
()
name_label
=
QLabel
(
"Name : "
)
name_label
.
setStyleSheet
(
"color:#fff;padding:8px
0px;font-size:20px"
)
mobile_label
=
QLabel
(
"Mobile : "
)
mobile_label
.
setStyleSheet
(
"color:#fff;padding:8px
0px;font-size:20px"
)
vechicle_label
=
QLabel
(
"Vehicle No : "
)
vechicle_label
.
setStyleSheet
(
"color:#fff;padding:8px
0px;font-size:20px"
)
vechicle_type
=
QLabel
(
"Vehicle Type : "
)
vechicle_type
.
setStyleSheet
(
"color:#fff;padding:8px
0px;font-size:20px"
)
error_label
=
QLabel
(
""
)
error_label
.
setStyleSheet
(
"color:red;padding:8px
0px;font-size:20px"
)
name_input
=
QLineEdit
()
name_input
.
setStyleSheet
(
"color:#fff;padding:8px
0px;font-size:20px"
)
mobile_input
=
QLineEdit
()
mobile_input
.
setStyleSheet
(
"color:#fff;padding:8px
0px;font-size:20px"
)
vehicle_input
=
QLineEdit
()
vehicle_input
.
setStyleSheet
(
"color:#fff;padding:8px
0px;font-size:20px"
)
vtype
=
QComboBox
()
vtype
.
setStyleSheet
(
"color:#fff;padding:8px
0px;font-size:20px;border:1px solid white"
)
vtype
.
addItem
(
"2 Wheeler"
)
vtype
.
addItem
(
"4 Wheeler"
)
button
=
QPushButton
(
"Add Vehicle"
)
button
.
setStyleSheet
(
"color:#fff;padding:8px
0px;font-size:20px;background:green;border:1px solid white"
)
layout
.
addWidget
(
name_label
)
layout
.
addWidget
(
name_input
)
layout
.
addWidget
(
mobile_label
)
layout
.
addWidget
(
mobile_input
)
layout
.
addWidget
(
vechicle_label
)
layout
.
addWidget
(
vehicle_input
)
layout
.
addWidget
(
vechicle_type
)
layout
.
addWidget
(
vtype
)
layout
.
addWidget
(
button
)
layout
.
addWidget
(
error_label
)
layout
.
setContentsMargins
(
0
,
0
,
0
,
0
)
frame
.
setMinimumHeight
(
self
.
height
())
frame
.
setMinimumWidth
(
self
.
width
())
frame
.
setMaximumHeight
(
self
.
width
())
frame
.
setMaximumWidth
(
self
.
width
())
layout
.
addStretch
()
frame
.
setLayout
(
layout
)
button
.
clicked
.
connect
(
lambda
:
self
.
addVehicles
(
name_input
.
text
(),
vehicl
e_input
.
text
(),
mobile_input
.
text
(),
vtype
.
currentIndex
(),
error_label
))
self
.
vertical_2
.
a
ddWidget
(
frame
)
def
addVehicles
(
self
,
name
,
vehicleno
,
mobile
,
index
,
error_label
):
vtp
=
2
if
index
==
0
:
vtp
=
2
else
:
vtp
=
4
data
=
self
.
dbOperation
.
AddVehicles
(
name
,
vehicleno
,
mobile
,
str
(
vtp
))
if
data
==
True
:
error_label
.setText(
"Added Successfully"
)
elif
data
==
False
:
error_label
.setText(
"Failed to Add Vehicle"
)
else
:
error_label
.setText(
str
(
data
))
def
addManagePage
(
self
):
data
=
self
.
dbOperation
.
getCurrentVehicle
()
self
.
table
=
QTableWidget
()
self
.
table
.
setStyleSheet
(
"background:#fff"
)
self
.
table
.
resize
(
self
.
width
(),
self
.
height
())
self
.
table
.
setRowCount
(
len
(
data
))
self
.
table
.
setColumnCount
(
7
)
self
.
table
.
horizontalHeader
().
setSectionResizeMode
(
QHeaderView
.ResizeTo
Contents)
self
.
table
.
setHorizontalHeaderItem
(
0
,
QTableWidgetItem
(
"ID"
))
self
.
table
.
setHorizontalHeaderItem
(
1
,
QTableWidgetItem
(
"Name"
))
self
.
table
.
setHorizontalHeaderItem
(
2
,
QTableWidgetItem
(
"VEHICLE
No"
))
self
.
table
.
setHorizontalHeaderItem
(
3
,
QTableWidgetItem
(
"MOBILE"
))
self
.
table
.
setHorizontalHeaderItem
(
4
,
QTableWidgetItem
(
"VEHICLE
TYPE"
))
self
.
table
.
setHorizontalHeaderItem
(
5
,
QTableWidgetItem
(
"ENTRY
TIME"
))
self
.
table
.
setHorizontalHeaderItem
(
6
,
QTableWidgetItem
(
"ACTION"
))
loop
=
0
for
smalldata
in
data
:
self
.
table
.
setItem
(
loop
,
0
,
QTableWidgetItem
(
str
(
smalldata
[
0
])))
self
.
table
.
setItem
(
loop
,
1
,
QTableWidgetItem
(
str
(
smalldata
[
1
])))
self
.
table
.
setItem
(
loop
,
2
,
QTableWidgetItem
(
str
(
smalldata
[
6
])))
self
.
table
.
setItem
(
loop
,
3
,
QTableWidgetItem
(
str
(
smalldata
[
2
])))
self
.
table
.
setItem
(
loop
,
4
,
QTableWidgetItem
(
str
(
smalldata
[
7
])))
self
.
table
.
setItem
(
loop
,
5
,
QTableWidgetItem
(
str
(
smalldata
[
3
])))
self
.
button_exit
=
QPushButton
(
"Exit"
)
self
.
button_exit
.
setStyleSheet
(
"color:#fff;padding:8px
0px;font-size:20px;background:green;border:1px solid white"
)
self
.
table
.
setCellWidget
(
loop
,
6
,
self
.
button_exit
)
self
.
button_exit
.
clicked
.
connect
(
self
.
exitCall
)
loop
=
loop
+
1
frame
=
QFrame
()
layout
=
QVBoxLayout
()
button
=
QPushButton
(
"Refresh"
)
button
.
setStyleSheet
(
"color:#fff;padding:8px
0px;font-size:20px;background:green;border:1px solid white"
)
button
.
clicked
.
connect
(
self
.
refreshManage
)
layout
.
setContentsMargins
(
0
,
0
,
0
,
0
)
layout
.
setSpacing
(
0
)
layout
.
addWidget
(
button
)
layout
.
addWidget
(
self
.
table
)
frame
.
setLayout
(
layout
)
frame
.
setContentsMargins
(
0
,
0
,
0
,
0
)
frame
.
setMaximumWidth
(
self
.
width
())
frame
.
setMinimumWidth
(
self
.
width
())
frame
.
setMaximumHeight
(
self
.
height
())
frame
.
setMinimumHeight
(
self
.
height
())
self
.
vertical_3
.
a
ddWidget
(
frame
)
self
.
vertical_3
.
a
ddStretch
()
def
refreshManage
(
self
):
data
=
self
.
dbOperation
.
getCurrentVehicle
()
self
.
table
.
setRowCount
(
len
(
data
))
self
.
table
.
setColumnCount
(
7
)
loop
=
0
for
smalldata
in
data
:
self
.
table
.
setItem
(
loop
,
0
,
QTableWidgetItem
(
str
(
smalldata
[
0
])))
self
.
table
.
setItem
(
loop
,
1
,
QTableWidgetItem
(
str
(
smalldata
[
1
])))
self
.
table
.
setItem
(
loop
,
2
,
QTableWidgetItem
(
str
(
smalldata
[
6
])))
self
.
table
.
setItem
(
loop
,
3
,
QTableWidgetItem
(
str
(
smalldata
[
2
])))
self
.
table
.
setItem
(
loop
,
4
,
QTableWidgetItem
(
str
(
smalldata
[
7
])))
self
.
table
.
setItem
(
loop
,
5
,
QTableWidgetItem
(
str
(
smalldata
[
3
])))
self
.
button_exit
=
QPushButton
(
"Exit"
)
self
.
table
.
setCellWidget
(
loop
,
6
,
self
.
button_exit
)
self
.
button_exit
.
clicked
.
connect
(
self
.
exitCall
)
loop
=
loop
+
1
def
refreshHistory
(
self
):
self
.
table1
.
clearContents
()
data
=
self
.
dbOperation
.
getAllVehicle
()
loop
=
0
self
.
table1
.
setRowCount
(
len
(
data
))
self
.
table1
.
setColumnCount
(
7
)
for
smalldata
in
data
:
self
.
table1
.
setItem
(
loop
,
0
,
QTableWidgetItem
(
str
(
smalldata
[
0
])))
self
.
table1
.
setItem
(
loop
,
1
,
QTableWidgetItem
(
str
(
smalldata
[
1
])))
self
.
table1
.
setItem
(
loop
,
2
,
QTableWidgetItem
(
str
(
smalldata
[
6
])))
self
.
table1
.
setItem
(
loop
,
3
,
QTableWidgetItem
(
str
(
smalldata
[
2
])))
self
.
table1
.
setItem
(
loop
,
4
,
QTableWidgetItem
(
str
(
smalldata
[
7
])))
self
.
table1
.
setItem
(
loop
,
5
,
QTableWidgetItem
(
str
(
smalldata
[
3
])))
self
.
table1
.
setItem
(
loop
,
6
,
QTableWidgetItem
(
str
(
smalldata
[
4
])))
loop
=
loop
+
1
def
addHistoryPage
(
self
):
data
=
self
.
dbOperation
.
getAllVehicle
()
self
.
table1
=
QTableWidget
()
self
.
table1
.
resize
(
self
.
width
(),
self
.
height
())
self
.
table1
.
setRowCount
(
len
(
data
))
self
.
table1
.
setStyleSheet
(
"background:#fff"
)
self
.
table1
.
setColumnCount
(
7
)
button
=
QPushButton
(
"Refresh"
)
button
.
setStyleSheet
(
"color:#fff;padding:8px
0px;font-size:20px;background:green;border:1px solid white"
)
button
.
clicked
.
connect
(
self
.
refreshHistory
)
self
.
table1
.
horizontalHeader
().
setSectionResizeMode
(
QHeaderView
.ResizeT
oContents)
self
.
table1
.
setHorizontalHeaderItem
(
0
,
QTableWidgetItem
(
"ID"
))
self
.
table1
.
setHorizontalHeaderItem
(
1
,
QTableWidgetItem
(
"Name"
))
self
.
table1
.
setHorizontalHeaderItem
(
2
,
QTableWidgetItem
(
"VEHICLE
No"
))
self
.
table1
.
setHorizontalHeaderItem
(
3
,
QTableWidgetItem
(
"MOBILE"
))
self
.
table1
.
setHorizontalHeaderItem
(
4
,
QTableWidgetItem
(
"VEHICLE
TYPE"
))
self
.
table1
.
setHorizontalHeaderItem
(
5
,
QTableWidgetItem
(
"ENTRY
TIME"
))
self
.
table1
.
setHorizontalHeaderItem
(
6
,
QTableWidgetItem
(
"EXIT
TIME"
))
loop
=
0
for
smalldata
in
data
:
self
.
table1
.
setItem
(
loop
,
0
,
QTableWidgetItem
(
str
(
smalldata
[
0
])))
self
.
table1
.
setItem
(
loop
,
1
,
QTableWidgetItem
(
str
(
smalldata
[
1
])))
self
.
table1
.
setItem
(
loop
,
2
,
QTableWidgetItem
(
str
(
smalldata
[
6
])))
self
.
table1
.
setItem
(
loop
,
3
,
QTableWidgetItem
(
str
(
smalldata
[
2
])))
self
.
table1
.
setItem
(
loop
,
4
,
QTableWidgetItem
(
str
(
smalldata
[
7
])))
self
.
table1
.
setItem
(
loop
,
5
,
QTableWidgetItem
(
str
(
smalldata
[
3
])))
self
.
table1
.
setItem
(
loop
,
6
,
QTableWidgetItem
(
str
(
smalldata
[
4
])))
loop
=
loop
+
1
self
.
frame5
=
QFrame
()
self
.
layout1
=
QVBoxLayout
()
self
.
layout1
.
setContentsMargins
(
0
,
0
,
0
,
0
)
self
.
layout1
.
setSpacing
(
0
)
self
.
layout1
.
addWidget
(
button
)
self
.
layout1
.
addWidget
(
self
.
table1
)
self
.
frame5
.
setLayout
(
self
.
layout1
)
self
.
frame5
.
setContentsMargins
(
0
,
0
,
0
,
0
)
self
.
frame5
.
setMaximumWidth
(
self
.
width
())
self
.
frame5
.
setMinimumWidth
(
self
.
width
())
self
.
frame5
.
setMaximumHeight
(
self
.
height
())
self
.
frame5
.
setMinimumHeight
(
self
.
height
())
self
.
vertical_4
.
a
ddWidget
(
self
.
frame5
)
self
.
vertical_4
.
a
ddStretch
()
def
exitCall
(
self
):
btton
=
self
.
sender
()
if
btton
:
row
=
self
.
table
.
indexAt
(
btton
.pos()).
row
()
id
=str
(
self
.
table
.
item
(
row
,
0
).
text
())
self
.
dbOperation
.
exitVehicle
(
id
)
self
.
table
.
removeRow
(
row
)
[Link]
import
mysql
.
connector
import
json
from
datetime
import
datetime
class
DBOperation
():
def
__init__
(
self
):
file
=
open
(
"./[Link]"
,
"r"
)
datadic
=
json
.
loads
(
file
.
read
())
file
.
close
()
self
.
mydb
=
mysql
.
connector
.
connect
(
host
=
"localhost"
,
user
=
"root"
,
passwd
=
"
"
,
d
atabase
=
"vpms_py"
)
def
CreateTables
(
self
):
cursor
=
self
.
mydb
.
cursor
()
cursor
.
execute
(
"DROP TABLE if exists admin"
)
cursor
.
execute
(
"DROP TABLE if exists slots"
)
cursor
.
execute
(
"DROP TABLE if exists vehicles"
)
cursor
.
execute
(
"CREATE
TABLE
admin
(id
int(255)
AUTO_INCREMENT
PRIMARY
KEY,username
varchar(30),password
varchar(30),created_at
varchar(30))"
)
cursor
.
execute
(
"CREATE
TABLE
slots
(id
int(255)
AUTO_INCREMENT
PRIMARY
KEY,vehicle_id
varchar(30),space_for
int(25),is_empty
int(25))"
)
cursor
.
execute
(
"CREATE
TABLE
vehicles
(id
int(255)
AUTO_INCREMENT
PRIMARY
KEY,name
varchar(30),mobile
varchar(30),entry_time
varchar(30),exit_time
varchar(30),is_exit
varchar(30),vehicle_no
varchar(30),vehicle_type
varchar(30),created_at
varchar(30),updated_at varchar(30))"
)
cursor
.
close
()
def
InsertOneTimeData
(
self
,
space_for_two
,
space_for_four
):
cursor
=
self
.
mydb
.
cursor
()
for
x
in
range
(
space_for_two
):
cursor
.
execute
(
"INSERT
into
slots
(space_for,is_empty)
values ('2','1')"
)
self
.
mydb
.
commit
()
for
x
in
range
(
space_for_four
):
cursor
.
execute
(
"INSERT
into
slots
(space_for,is_empty)
values ('4','1')"
)
self
.
mydb
.
commit
()
cursor
.
close
()
def
InsertAdmin
(
self
,
username
,
password
):
cursor
=
self
.
mydb
.
cursor
()
val
=
(
username
,
password
)
cursor
.
execute
(
"INSERT
into
admin
(username,password)
values
(
%s
,
%
s
)"
,
val
)
self
.
mydb
.
commit
()
cursor
.
close
()
def
doAdminLogin
(
self
,
username
,
pasword
):
cursor
=
self
.
mydb
.
cursor
()
cursor
.
execute
(
"select
*
from
admin
where
username='"
+
username
+
"' and password='"
+
pasword
+
"'"
)
data
=
cursor
.
fetchall
()
cursor
.
close
()
if
len
(
data
)
>
0
:
return
True
else
:
return
False
def
getSlotSpace
(
self
):
cursor
=
self
.
mydb
.
cursor
()
cursor
.
execute
(
"select * from slots"
)
data
=
cursor
.
fetchall
()
cursor
.
close
()
return
data
def
getCurrentVehicle
(
self
):
cursor
=
self
.
mydb
.
cursor
()
cursor
.
execute
(
"select * from vehicles where is_exit='0'"
)
data
=
cursor
.
fetchall
()
cursor
.
close
()
return
data
def
getAllVehicle
(
self
):
cursor
=
self
.
mydb
.
cursor
()
cursor
.
execute
(
"select * from vehicles where is_exit='1'"
)
data
=
cursor
.
fetchall
()
cursor
.
close
()
return
data
def
AddVehicles
(
self
,
name
,
vehicleno
,
mobile
,
vehicle_type
):
spacid
=
self
.
spaceAvailable
(
vehicle_type
)
if
spacid
:
currentdata
=
datetime
.
now
().
strftime
(
"%Y-%m-
%d
%H:%M:%S"
)
data
=
(
n
ame
,
mobile
,
str
(
currentdata
),
''
,
'0'
,
vehicleno
,
str
(
c
urrentdata
),
st
r
(
c
urrentdata
),
vehicle_type
)
cursor
=
self
.
mydb
.
cursor
()
cursor
.
execute
(
"INSERT into
vehicles
(name,mobile,entry_time,exit_time,is_exit,vehicle_no,created_at,updated
_at,vehicle_type) values (
%s
,
%s
,
%s
,
%s
,
%s
,
%s
,
%s
,
%s
,
%s
)"
,
data
)
self
.
mydb
.
commit
()
lastid
=
cursor
.
lastrowid
cursor
.
execute
(
"UPDATE slots
set
vehicle_id='"
+
str
(
lastid
)
+
"',is_empty='0' where id='"
+
str
(
spacid
)
+
"'"
)
self
.
mydb
.
commit
()
cursor
.
close
()
return
True
else
:
return
"No Space Available for Parking"
def
spaceAvailable
(
self
,
v_type
):
cursor
=
self
.
mydb
.
cursor
()
cursor
.
e
xecute
(
"select
*
from
slots
where
is_empty='1'
and
space_for='"
+
str
(
v
_type
)
+
"'"
)
data
=
cursor
.
fetchall
()
cursor
.
close
()
if
len
(
data
)
>
0
:
return
data
[
0
][
0
]
else
:
return
False
def
exitVehicle
(
self
,
id
):
cursor
=
self
.
mydb
.
cursor
()
currentdata
=
datetime
.
now
().
strftime
(
"%Y-%m-
%d
%H:%M:%S"
)
cursor
.
e
xecute
(
"UPDATE
slots
set
is_empty='1',vehicle_id=''
where vehicle_id='"
+
id
+
"'"
)
self
.
mydb
.
commit
()
cursor
.
execute
(
"UPDATE
vehicles
set
is_exit='1',exit_time='"
+
currentdata
+
"' where id='"
+
id
+
"'"
)
self
.
mydb
.
commit
()
OUTPUT :
Thank you !