Untitled
import tkinter as tk from tkinter import ttk, messagebox, filedialog, PhotoImage import sqlite3 def initialize_database(): conn = sqlite3.connect("sms_system.db") cursor = conn.cursor() cursor.execute(""" CREATE TABLE IF NOT EXISTS recipients ( id INTEGER PRIMARY KEY AUTOINCREMENT, phone_number TEXT NOT NULL ) """) cursor.execute(""" CREATE TABLE IF NOT EXISTS message ( id INTEGER PRIMARY KEY AUTOINCREMENT, content TEXT NOT NULL, timestamp DATETIME DEFAULT CURRENT_TIMESTAMP ) """) conn.commit() conn.close() initialize_database() def send_sms(): recipients = numbers_list.get(0, tk.END) message = message_text.get("1.0", tk.END).strip() if not recipients: messagebox.showerror("Error", "Recipient list is empty.") return if not message: messagebox.showerror("Error", "Message cannot be empty.") return for recipient in recipients: print(f"Sending SMS to {recipient}") messagebox.showinfo("Success", "Messages sent successfully!") def load_contacts(): file_path = filedialog.askopenfilename(filetypes=[["Text Files", "*.txt"]]) if file_path: with open(file_path, "r") as file: for line in file: numbers_list.insert(tk.END, line.strip()) def save_template(): template = message_text.get("1.0", tk.END).strip() if not template: messagebox.showerror("Error", "Message cannot be empty.") return with open("messages.txt", "a") as file: file.write(template + "\n\n") messagebox.showinfo("Success", "Template saved successfully!") def add_recipients_to_db(phone_number): conn = sqlite3.connect("sms_system.db") cursor = conn.cursor() cursor.execute("INSERT INTO recipients (phone_number) VALUES (?)", (phone_number,)) conn.commit() conn.close() def save_message_to_db(content): conn = sqlite3.connect("sms_system.db") cursor = conn.cursor() cursor.execute("INSERT INTO message (content) VALUES (?)", (content,)) conn.commit() conn.close() def load_recipients(): conn = sqlite3.connect("sms_system.db") cursor = conn.cursor() cursor.execute("SELECT phone_number from recipients") rows = cursor.fetchall() conn.close() return [row[0] for row in rows] def load_templates(): conn = sqlite3.connect("sms_system.db") cursor = conn.cursor() cursor.execute("SELECT content FROM messages") rows = cursor.fetchall() conn.close() return[row[0] for row in rows] root = tk.Tk() root.title("PLMar SHS - SMS Announcement System") root.geometry("610x630") root.iconbitmap(r"e:\plmars.ico") canvas = tk.Canvas(root) scrollbar = tk.Scrollbar(root, orient="vertical", command=canvas.yview) scrollable_frame = tk.Frame(canvas) scrollable_frame.bind( "<Configure>", lambda e: canvas.configure(scrollregion=canvas.bbox("all")) ) canvas.create_window((0, 0), window=scrollable_frame, anchor="n") canvas.configure(yscrollcommand=scrollbar.set) scrollbar.pack(side="right", fill="y") canvas.pack(side="left", fill="both", expand=True) header_frame = tk.Frame(scrollable_frame, bg="#4CAAD8", height=80) header_frame.pack(fill=tk.X, pady=10) try: logo = PhotoImage(file="e:\plmarsnobg.png") resized_logo = logo.subsample(3,3) logo_label = tk.Label(header_frame, image=resized_logo, bg="#4CAAD8") logo_label.image = resized_logo logo_label.pack(side=tk.LEFT, padx=10) except Exception as e: print("Error loading logo", e) header_label = tk.Label(header_frame, text="PAMANTASAN NG LUNGSOD NG MARIKINA\nSENIOR HIGH SCHOOL\nSMS ANNOUNCEMENT SYSTEM", bg="#4CAAD8", fg="white", font=("Arial", 14, "bold")) header_label.pack(side="top", fill="x", padx=10, pady=10, expand=True) input_frame = tk.Frame(scrollable_frame, padx=10, pady=10) input_frame.pack(fill=tk.X, expand=True) recipient_label = tk.Label(input_frame, text="Enter Recipient Number:", font=("Arial", 10)) recipient_label.grid(row=0, column=0, sticky="e", padx=5, pady=5) recipient_entry = tk.Entry(input_frame, width=25) recipient_entry.grid(row=0, column=1, sticky="w", padx=5, pady=5) add_button = tk.Button(input_frame, text="Add", width=10, command=lambda: [ add_recipients_to_db(recipient_entry.get()), numbers_list.insert(tk.END, recipient_entry.get()), recipient_entry.get(0, tk.END) ]) add_button.grid(row=0, column=2, sticky="w", padx=5, pady=5) load_button = tk.Button(input_frame, text="Load Contacts From File", width=20, command=load_contacts) load_button.grid(row=0, column=3, sticky="w", padx=5, pady=5) total_label = tk.Label(input_frame, text="Total Numbers:", font=("Arial", 10, "bold")) total_label.grid(row=1, column=0, sticky="w", pady=10) numbers_list = tk.Listbox(input_frame, width=50, height=10) numbers_list.grid(row=2, column=0, columnspan=4, pady=5, sticky="nsew") recipients = load_recipients() for recipient in recipients: numbers_list.insert(tk.END, recipient) message_frame = tk.Frame(scrollable_frame, padx=10, pady=10) message_frame.pack(fill=tk.X, expand=True) message_label = tk.Label(message_frame, text="Message:", font=("Arial", 10)) message_label.pack(anchor="w") message_text = tk.Text(message_frame, height=8, width=50) message_text.pack(fill=tk.BOTH, pady=5) example_message = """PLMARS:Announcement!""" message_text.insert(tk.END, example_message) options_frame = tk.Frame(scrollable_frame, padx=10, pady=10) options_frame.pack(fill=tk.X, expand=True) mobile_device_label = tk.Label(options_frame, text="Selected Mobile Device:", font=("Arial", 10)) mobile_device_label.grid(row=0, column=0, sticky="w", padx=0, pady=0) device_label = tk.Label(options_frame, text="SAMSUNG S20 Ultra", font=("Arial", 10, "bold")) device_label.grid(row=0, column=1, sticky="e", padx=0, pady=0) status_label = tk.Label(options_frame, text="Status: Disconnected", bg="purple", fg="white", font=("Arial", 10)) status_label.grid(row=1, column=0, columnspan=2, sticky="w", pady=5) one_time_radio = tk.Radiobutton(options_frame, text="One-Time Execution", value=1) one_time_radio.grid(row=2, column=0, sticky="w", pady=5) one_by_one_radio = tk.Radiobutton(options_frame, text="One-by-One Execution Mode", value=2) one_by_one_radio.grid(row=3, column=0, sticky="w") delay_checkbox = tk.Checkbutton(options_frame, text="Delayed Delivery:") delay_checkbox.grid(row=4, column=0, sticky="w") delay_frame = tk.Frame(options_frame) delay_frame.grid(row=4, column=1, sticky="w") delay_sms_spinbox = tk.Spinbox(delay_frame, from_=1, to=10, width=5) delay_sms_spinbox.pack(side=tk.LEFT) delay_sms_label = tk.Label(delay_frame, text="SMS") delay_sms_label.pack(side=tk.LEFT, padx=5) delay_time_spinbox = tk.Spinbox(delay_frame, from_=1, to=10, width=5) delay_time_spinbox.pack(side=tk.LEFT) delay_time_label = tk.Label(delay_frame, text="Sec.") delay_time_label.pack(side=tk.LEFT, padx=5) save_sent_checkbox = tk.Checkbutton(options_frame, text="Save Sent Messages") save_sent_checkbox.grid(row=5, column=0, sticky="w", pady=5) save_templates_checkbox = tk.Checkbutton(options_frame, text="Save sent message to Templates", command=save_template) save_templates_checkbox.grid(row=6, column=0, sticky="w") view_templates_button = tk.Button(options_frame, text="View Templates", width=15, command=lambda: messagebox.showinfo("Templates", "Templates saved to messages.txt")) view_templates_button.grid(row=6, column=1, sticky="w") button_frame = tk.Frame(scrollable_frame, padx=10, pady=10) button_frame.pack(fill=tk.X, expand=True) send_items_button = tk.Button(button_frame, text="SEND ITEMS", width=15, bg="green", fg="white", command=lambda: [ send_sms(), save_message_to_db(message_text("1.0", tk.END).strip()) ]) send_items_button.pack(side=tk.LEFT, padx=5) send_button = tk.Button(button_frame, text="SEND", width=15, bg="blue", fg="white", command=lambda: [ send_sms(), save_message_to_db(message_text("1.0", tk.END).strip()) ]) send_button.pack(side=tk.LEFT, padx=5) reset_button = tk.Button(button_frame, text="RESET", width=15, bg="red", fg="white", command=lambda: [numbers_list.delete(0, tk.END), message_text.delete("1.0", tk.END)]) reset_button.pack(side=tk.LEFT, padx=5) footer_frame = tk.Frame(scrollable_frame, padx=10, pady=10) footer_frame.pack(fill=tk.X, expand=True) about_button = tk.Button(footer_frame, text="ABOUT", width=10, command=lambda: messagebox.showinfo("About", "PLMar SHS SMS Announcement System\nVersion 1.0")) about_button.pack(side=tk.LEFT, padx=5) help_button = tk.Button(footer_frame, text="HELP", width=10, command=lambda: messagebox.showinfo("Help", "For assistance, contact support@plmar.edu.ph")) help_button.pack(side=tk.LEFT, padx=5) root.mainloop()
Leave a Comment