Untitled

 avatar
unknown
plain_text
9 months ago
3.4 kB
4
Indexable
import tkinter as tk
from tkinter import ttk, messagebox
import sqlite3
from datetime import datetime

# Database setup
conn = sqlite3.connect('calendar_app.db')
c = conn.cursor()
c.execute('''CREATE TABLE IF NOT EXISTS events (
                id INTEGER PRIMARY KEY,
                title TEXT NOT NULL,
                description TEXT,
                date TEXT NOT NULL,
                time TEXT NOT NULL)''')
conn.commit()

# Functions
def add_event():
    title = title_entry.get()
    description = description_entry.get("1.0", tk.END).strip()
    date = date_entry.get()
    time = time_entry.get()
    
    if not title or not date or not time:
        messagebox.showwarning("Input Error", "Title, Date, and Time are required!")
        return
    
    c.execute("INSERT INTO events (title, description, date, time) VALUES (?, ?, ?, ?)",
              (title, description, date, time))
    conn.commit()
    refresh_events()
    clear_inputs()

def delete_event(event_id):
    c.execute("DELETE FROM events WHERE id=?", (event_id,))
    conn.commit()
    refresh_events()

def clear_inputs():
    title_entry.delete(0, tk.END)
    description_entry.delete("1.0", tk.END)
    date_entry.delete(0, tk.END)
    time_entry.delete(0, tk.END)

def refresh_events():
    for item in events_tree.get_children():
        events_tree.delete(item)
    c.execute("SELECT * FROM events")
    for row in c.fetchall():
        events_tree.insert("", tk.END, values=row)

# GUI setup
root = tk.Tk()
root.title("Simple Calendar App")

# Input frame
input_frame = ttk.Frame(root, padding="10")
input_frame.grid(row=0, column=0, sticky=(tk.W, tk.E))

# Title
ttk.Label(input_frame, text="Title:").grid(row=0, column=0, sticky=tk.W, pady=5)
title_entry = ttk.Entry(input_frame, width=30)
title_entry.grid(row=0, column=1, pady=5)

# Description
ttk.Label(input_frame, text="Description:").grid(row=1, column=0, sticky=tk.W, pady=5)
description_entry = tk.Text(input_frame, width=30, height=4)
description_entry.grid(row=1, column=1, pady=5)

# Date
ttk.Label(input_frame, text="Date (YYYY-MM-DD):").grid(row=2, column=0, sticky=tk.W, pady=5)
date_entry = ttk.Entry(input_frame, width=30)
date_entry.grid(row=2, column=1, pady=5)

# Time
ttk.Label(input_frame, text="Time (HH:MM):").grid(row=3, column=0, sticky=tk.W, pady=5)
time_entry = ttk.Entry(input_frame, width=30)
time_entry.grid(row=3, column=1, pady=5)

# Add button
add_button = ttk.Button(input_frame, text="Add Event", command=add_event)
add_button.grid(row=4, column=1, pady=5)

# Events frame
events_frame = ttk.Frame(root, padding="10")
events_frame.grid(row=1, column=0, sticky=(tk.W, tk.E))

# Events treeview
columns = ("ID", "Title", "Description", "Date", "Time")
events_tree = ttk.Treeview(events_frame, columns=columns, show="headings")
for col in columns:
    events_tree.heading(col, text=col)
events_tree.grid(row=0, column=0, sticky=(tk.W, tk.E))

# Delete button
def on_delete_event():
    selected_item = events_tree.selection()[0]
    event_id = events_tree.item(selected_item)['values'][0]
    delete_event(event_id)

delete_button = ttk.Button(events_frame, text="Delete Event", command=on_delete_event)
delete_button.grid(row=1, column=0, pady=5)

refresh_events()

# Main loop
root.mainloop()
Editor is loading...
Leave a Comment