import tkinter as tk
from tkinter import messagebox
import sqlite3
from datetime import datetime
# ------------------ DATABASE ------------------ #
conn = sqlite3.connect('call_history.db')
cursor = conn.cursor()
cursor.execute('''
CREATE TABLE IF NOT EXISTS calls (
id INTEGER PRIMARY KEY AUTOINCREMENT,
number TEXT NOT NULL,
timestamp TEXT NOT NULL
)
''')
conn.commit()
# ------------------ MAIN DIALER APP ------------------ #
class PhoneDialer:
def __init__(self, root):
self.root = root
self.root.title("📱 Virtual Phone Dialer")
self.number_var = tk.StringVar()
self.create_widgets()
def create_widgets(self):
# Entry to show the number
self.display = tk.Entry(self.root, textvariable=self.number_var, font=('Helvetica', 20), bd=10, justify='right')
self.display.grid(row=0, column=0, columnspan=3, pady=10)
# Keypad buttons
btn_texts = [
'1', '2', '3',
'4', '5', '6',
'7', '8', '9',
'*', '0', '#'
]
r = 1
c = 0
for text in btn_texts:
tk.Button(self.root, text=text, font=('Helvetica', 18), width=5, height=2,
command=lambda t=text: self.append_number(t)).grid(row=r, column=c, padx=5, pady=5)
c += 1
if c > 2:
c = 0
r += 1
# Call button
tk.Button(self.root, text="📞 Call", bg="green", fg="white", font=('Helvetica', 18),
command=self.make_call).grid(row=5, column=0, pady=10, padx=5, sticky='we')
# Clear button
tk.Button(self.root, text="❌ Clear", bg="orange", fg="black", font=('Helvetica', 18),
command=self.clear).grid(row=5, column=1, pady=10, padx=5, sticky='we')
# History button
tk.Button(self.root, text="🕒 History", bg="blue", fg="white", font=('Helvetica', 18),
command=self.show_history).grid(row=5, column=2, pady=10, padx=5, sticky='we')
def append_number(self, val):
current = self.number_var.get()
self.number_var.set(current + val)
def clear(self):
self.number_var.set("")
def make_call(self):
number = self.number_var.get()
if number:
timestamp = datetime.now().strftime("%Y-%m-%d %H:%M:%S")
cursor.execute("INSERT INTO calls (number, timestamp) VALUES (?, ?)", (number, timestamp))
conn.commit()
messagebox.showinfo("Calling", f"Calling {number}...\n(Call logged)")
self.clear()
else:
messagebox.showwarning("Empty", "Please enter a number")
def show_history(self):
history_win = tk.Toplevel(self.root)
history_win.title("📜 Call History")
tk.Label(history_win, text="Number", font=('Helvetica', 14, 'bold')).grid(row=0, column=0, padx=10, pady=5)
tk.Label(history_win, text="Timestamp", font=('Helvetica', 14, 'bold')).grid(row=0, column=1, padx=10, pady=5)
cursor.execute("SELECT number, timestamp FROM calls ORDER BY id DESC")
rows = cursor.fetchall()
for idx, (number, timestamp) in enumerate(rows):
tk.Label(history_win, text=number, font=('Helvetica', 12)).grid(row=idx+1, column=0, padx=10, sticky='w')
tk.Label(history_win, text=timestamp, font=('Helvetica', 12)).grid(row=idx+1, column=1, padx=10, sticky='w')
# ------------------ RUN APP ------------------ #
if __name__ == "__main__":
root = tk.Tk()
app = PhoneDialer(root)
root.mainloop()
No comments:
Post a Comment