import tkinter as tk
from tkinter import messagebox
import sqlite3
import random
# -----------------------
# Database Setup
# -----------------------
def init_db():
conn = sqlite3.connect("parking.db")
cur = conn.cursor()
cur.execute(
"""CREATE TABLE IF NOT EXISTS parking_slots (
id INTEGER PRIMARY KEY,
slot_number TEXT UNIQUE,
status TEXT
)"""
)
# Initialize 10 slots if not exist
cur.execute("SELECT COUNT(*) FROM parking_slots")
count = cur.fetchone()[0]
if count == 0:
for i in range(1, 11):
cur.execute("INSERT INTO parking_slots (slot_number, status) VALUES (?, ?)",
(f"SLOT-{i}", "Free"))
conn.commit()
conn.close()
# -----------------------
# Database Functions
# -----------------------
def get_slots():
conn = sqlite3.connect("parking.db")
cur = conn.cursor()
cur.execute("SELECT * FROM parking_slots")
slots = cur.fetchall()
conn.close()
return slots
def update_slot(slot_id, status):
conn = sqlite3.connect("parking.db")
cur = conn.cursor()
cur.execute("UPDATE parking_slots SET status=? WHERE id=?", (status, slot_id))
conn.commit()
conn.close()
# -----------------------
# GUI Functions
# -----------------------
def refresh_slots():
for widget in frame_slots.winfo_children():
widget.destroy()
slots = get_slots()
for slot in slots:
slot_id, slot_number, status = slot
color = "green" if status == "Free" else "red"
btn = tk.Button(frame_slots, text=f"{slot_number}\n{status}",
bg=color, fg="white", width=12, height=3,
command=lambda s=slot: toggle_slot(s))
btn.pack(side=tk.LEFT, padx=5, pady=5)
def toggle_slot(slot):
slot_id, slot_number, status = slot
if status == "Free":
update_slot(slot_id, "Booked")
messagebox.showinfo("Booked", f"You booked {slot_number}")
else:
update_slot(slot_id, "Free")
messagebox.showinfo("Freed", f"You freed {slot_number}")
refresh_slots()
def random_update():
slots = get_slots()
random_slot = random.choice(slots)
slot_id, slot_number, status = random_slot
new_status = "Free" if status == "Booked" else "Booked"
update_slot(slot_id, new_status)
refresh_slots()
root.after(5000, random_update) # auto change every 5s
# -----------------------
# Main App
# -----------------------
if __name__ == "__main__":
init_db()
root = tk.Tk()
root.title("Smart Parking System Simulator")
root.geometry("800x400")
tk.Label(root, text="🚗 Smart Parking System Simulator", font=("Arial", 16, "bold")).pack(pady=10)
frame_slots = tk.Frame(root)
frame_slots.pack(pady=20)
refresh_slots()
# Auto slot updates (simulate cars parking)
root.after(5000, random_update)
root.mainloop()
No comments:
Post a Comment