0% found this document useful (0 votes)
5 views4 pages

Smart Traffic Prediction App TN

Uploaded by

srilasyak07
Copyright
© All Rights Reserved
We take content rights seriously. If you suspect this is your content, claim it here.
Available Formats
Download as TXT, PDF, TXT or read online on Scribd
0% found this document useful (0 votes)
5 views4 pages

Smart Traffic Prediction App TN

Uploaded by

srilasyak07
Copyright
© All Rights Reserved
We take content rights seriously. If you suspect this is your content, claim it here.
Available Formats
Download as TXT, PDF, TXT or read online on Scribd

import tkinter as tk

from tkinter import ttk, messagebox


import random
import datetime
import [Link] as plt
from [Link].backend_tkagg import FigureCanvasTkAgg

# ================================
# 🚦 Window Config
# ================================
root = [Link]()
[Link]("Smart Traffic Prediction - Tamil Nadu")
[Link]("1000x720")
[Link](bg="#f3f3f3")

# ================================
# 📍 Locations + Streets
# ================================
streets = {
"Chennai - T Nagar": [
"Usman Road", "Pondy Bazaar", "Ranganathan Street",
"G.N. Chetty Road", "Mambalam Main Road"
],
"Chennai - Anna Nagar": [
"3rd Avenue", "2nd Avenue", "Shanthi Colony",
"4th Main Road", "Tower Park Road"
],
"Chennai - OMR IT Corridor": [
"Navallur Road", "Sholinganallur Main Road", "Thoraipakkam Road",
"Karapakkam IT Road", "Semmancheri Signal"
],
"Coimbatore - Gandhipuram": [
"Cross Cut Road", "100 Feet Road", "Town Hall Road",
"DB Road", "Avinashi Link Road"
],
"Madurai - Anna Nagar": [
"11th Street", "Roundana Road", "Simmakkal Road",
"Kamarajar Street", "Narayanapuram Main"
],
}

# ================================
# 🏷 Title
# ================================
title_lbl = [Link](
root,
text="🚦 Smart Traffic Prediction (Tamil Nadu Streets)",
font=("Arial", 16, "bold"),
bg="#f3f3f3"
)
title_lbl.pack(pady=10)

# ==================================
# 📌 INPUT FRAME
# ==================================
input_frame = [Link](root, bg="#f3f3f3")
input_frame.pack(pady=5)

# ---------- Row 1: Location & Street ----------


[Link](input_frame, text="📍 Location", font=("Arial", 11),
bg="#f3f3f3").grid(row=0, column=0, padx=8, pady=6, sticky="w")

loc_var = [Link]()
loc_box = [Link](input_frame, textvariable=loc_var,
width=30, state="readonly")
loc_box["values"] = list([Link]())
loc_box.current(0)
loc_box.grid(row=0, column=1, padx=8, pady=6)

[Link](input_frame, text=" Street", font=("Arial", 11),


bg="#f3f3f3").grid(row=0, column=2, padx=8, pady=6, sticky="w")

street_var = [Link]()
street_box = [Link](input_frame, textvariable=street_var,
width=30, state="readonly")
street_box["values"] = streets[loc_box.get()]
street_box.current(0)
street_box.grid(row=0, column=3, padx=8, pady=6)

def update_street_list(event):
"""Update street options when location changes."""
location = loc_box.get()
street_box["values"] = streets[location]
street_box.current(0)

loc_box.bind("<<ComboboxSelected>>", update_street_list)

# ---------- Row 2: Time & Generate ----------


[Link](input_frame, text="⏰ Time (7-23)", font=("Arial", 11),
bg="#f3f3f3").grid(row=1, column=0, padx=8, pady=6, sticky="w")

time_var = [Link](value=9)
time_spin = [Link](input_frame, from_=7, to=23,
textvariable=time_var, width=8)
time_spin.grid(row=1, column=1, padx=8, pady=6, sticky="w")

# placeholder for button – defined after generate() to avoid forward reference


generate_btn = None

# ================================
# 📋 REPORT FRAME
# ================================
report_frame = [Link](root, bg="#f3f3f3")
report_frame.pack(pady=10)

report_var = [Link]()
report_lbl = [Link](
report_frame,
textvariable=report_var,
justify="left",
bg="#ffffff",
fg="black",
width=90,
height=8,
bd=2,
relief="solid",
font=("Courier New", 10)
)
report_lbl.pack()

# ================================
# 📊 GRAPH FRAME
# ================================
graph_frame = [Link](root, bg="#ffffff", bd=2, relief="solid")
graph_frame.pack(padx=20, pady=10, fill="both", expand=True)

# ================================
# 🎯 GENERATE LOGIC
# ================================
def generate():
location = loc_box.get()
street = street_box.get()
time_sel = time_var.get()

# --- validation ---


if not street:
[Link]("Error", "Please select a Street.")
return
if not (7 <= time_sel <= 23):
[Link]("Error", "Enter a valid time between 7 and 23.")
return

# --- random traffic data for 7 AM - 11 PM (17 hours) ---


counts = [[Link](80, 580) for _ in range(17)]
hour_labels = [
(f"{i-12} PM" if i > 12 else f"{i} AM") for i in range(7, 24)
]
vehicles = counts[time_sel - 7]
max_val = max(counts)
cg = vehicles / max_val

# --- traffic zone logic ---


if cg <= 0.39:
zone = "🟢 LOW TRAFFIC"
msg = "👍 Good time to travel."
elif cg <= 0.69:
zone = "🟡 MODERATE TRAFFIC"
msg = "⚠ Slight delay possible."
else:
zone = "🔴 HIGH TRAFFIC"
msg = "🚫 Avoid travelling now."

today = [Link]().strftime("%d-%b-%Y, %A")

report_var.set(
f"""
📅 {today}
📍 {location}
{street}
⏰ {time_sel}:00 hrs

🚗 Vehicles: {vehicles}
🚦 Zone: {zone}
💡 Suggestion: {msg}
"""
)

# --- clear old graphs ---


for widget in graph_frame.winfo_children():
[Link]()

# ========== Scatter Plot ==========


fig1 = [Link](figsize=(4.5, 3.5), dpi=100)
ax1 = fig1.add_subplot(111)
colors = [
"green" if c <= max_val * 0.39 else
("yellow" if c <= max_val * 0.69 else "red")
for c in counts
]
[Link](counts, range(len(counts)), c=colors,
s=80, edgecolors="black")
ax1.set_xlabel("Vehicle Count")
ax1.set_ylabel("Time")
ax1.set_yticks(range(len(hour_labels)))
ax1.set_yticklabels(hour_labels)

canvas1 = FigureCanvasTkAgg(fig1, master=graph_frame)


[Link]()
canvas1.get_tk_widget().pack(side="left", padx=10, pady=10, expand=True)

# ========== Line Plot ==========


fig2 = [Link](figsize=(4.5, 3.5), dpi=100)
ax2 = fig2.add_subplot(111)
[Link](hour_labels, counts, marker="o", linewidth=2)
ax2.set_xticklabels(hour_labels, rotation=45, fontsize=8)
ax2.set_ylabel("Vehicles")

canvas2 = FigureCanvasTkAgg(fig2, master=graph_frame)


[Link]()
canvas2.get_tk_widget().pack(side="right", padx=10, pady=10, expand=True)

# now create the Generate button (after generate() is defined)


generate_btn = [Link](
input_frame,
text="Generate",
command=generate,
font=("Arial", 11, "bold"),
bg="#007bff",
fg="white",
pady=3,
padx=15
)
generate_btn.grid(row=1, column=2, padx=8, pady=6, sticky="w")

# ================================
# 🏁 START APP
# ================================
[Link]()

You might also like