Skip to content

Commit f0cbd52

Browse files
authored
Create Prime-Number-Checker.py
1 parent d76ab4b commit f0cbd52

1 file changed

Lines changed: 133 additions & 0 deletions

File tree

Lines changed: 133 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,133 @@
1+
import sys
2+
import os
3+
import tkinter as tk
4+
from tkinter import ttk, messagebox, scrolledtext
5+
import sv_ttk
6+
7+
# =========================
8+
# App Setup
9+
# =========================
10+
root = tk.Tk()
11+
root.title("Prime Number Checker")
12+
root.geometry("900x600")
13+
root.iconbitmap("") # Add path to your icon if needed
14+
15+
sv_ttk.set_theme("light") # Default theme
16+
17+
# =========================
18+
# Globals
19+
# =========================
20+
checked_numbers = {} # number: True/False
21+
dark_mode_var = tk.BooleanVar(value=False)
22+
23+
# =========================
24+
# Helpers
25+
# =========================
26+
def toggle_theme():
27+
if dark_mode_var.get():
28+
root.configure(bg="#2E2E2E")
29+
style.configure("TLabel", background="#2E2E2E", foreground="white")
30+
style.configure("TFrame", background="#2E2E2E")
31+
style.configure("TButton", background="#4CAF50", foreground="white")
32+
style.configure("TNotebook", background="#2E2E2E")
33+
else:
34+
root.configure(bg="#FFFFFF")
35+
style.configure("TLabel", background="#FFFFFF", foreground="black")
36+
style.configure("TFrame", background="#FFFFFF")
37+
style.configure("TButton", background="#4CAF50", foreground="white")
38+
style.configure("TNotebook", background="#FFFFFF")
39+
40+
def is_prime(n):
41+
if n <= 1:
42+
return False
43+
if n <= 3:
44+
return True
45+
if n % 2 == 0 or n % 3 == 0:
46+
return False
47+
i = 5
48+
while i * i <= n:
49+
if n % i == 0 or n % (i + 2) == 0:
50+
return False
51+
i += 6
52+
return True
53+
54+
def check_number():
55+
num_str = number_entry.get().strip()
56+
if not num_str.isdigit():
57+
messagebox.showerror("Invalid Input", "Enter a valid positive integer.")
58+
return
59+
num = int(num_str)
60+
prime = is_prime(num)
61+
checked_numbers[num] = prime
62+
update_results()
63+
number_entry.delete(0, tk.END)
64+
65+
def update_results():
66+
result_text.configure(state="normal")
67+
result_text.delete("1.0", tk.END)
68+
for num, prime in sorted(checked_numbers.items()):
69+
if prime:
70+
result_text.insert(tk.END, f"✅ {num} is a prime number.\n", "prime")
71+
else:
72+
result_text.insert(tk.END, f"❌ {num} is NOT a prime number.\n", "not_prime")
73+
result_text.configure(state="disabled")
74+
result_text.tag_configure("prime", foreground="#4CAF50")
75+
result_text.tag_configure("not_prime", foreground="#F44336")
76+
77+
def clear_history():
78+
checked_numbers.clear()
79+
update_results()
80+
81+
def copy_results():
82+
root.clipboard_clear()
83+
root.clipboard_append(result_text.get("1.0", tk.END))
84+
messagebox.showinfo("Copied", "Results copied to clipboard.")
85+
86+
# =========================
87+
# Styles
88+
# =========================
89+
style = ttk.Style()
90+
style.theme_use("clam")
91+
92+
style.configure("Action.TButton", font=("Segoe UI", 11, "bold"),
93+
foreground="white", background="#4CAF50", padding=8)
94+
style.map("Action.TButton", background=[("active", "#45a049"), ("disabled", "#a5d6a7")])
95+
96+
style.configure("Secondary.TButton", font=("Segoe UI", 11, "bold"),
97+
foreground="white", background="#2196F3", padding=8)
98+
style.map("Secondary.TButton", background=[("active", "#1976D2"), ("disabled", "#90caf9")])
99+
100+
# =========================
101+
# Layout
102+
# =========================
103+
top_frame = ttk.Frame(root, padding=20)
104+
top_frame.pack(fill="x")
105+
106+
ttk.Label(top_frame, text="Prime Number Checker", font=("Segoe UI", 20, "bold")).pack(anchor="w")
107+
ttk.Label(top_frame, text="Enter a number and check if it is prime.", font=("Segoe UI", 11)).pack(anchor="w", pady=(0,10))
108+
109+
input_frame = ttk.Frame(root, padding=10)
110+
input_frame.pack(fill="x")
111+
112+
ttk.Label(input_frame, text="Number:", font=("Segoe UI", 12)).pack(side="left", padx=(0,5))
113+
number_entry = ttk.Entry(input_frame, width=20, font=("Segoe UI", 12))
114+
number_entry.pack(side="left", padx=(0,10), ipady=4)
115+
116+
ttk.Button(input_frame, text="Check", command=check_number, style="Action.TButton").pack(side="left", padx=5)
117+
ttk.Button(input_frame, text="Clear History", command=clear_history, style="Secondary.TButton").pack(side="left", padx=5)
118+
ttk.Button(input_frame, text="Copy Results", command=copy_results, style="Secondary.TButton").pack(side="left", padx=5)
119+
120+
dark_frame = ttk.Frame(root, padding=10)
121+
dark_frame.pack(fill="x")
122+
ttk.Checkbutton(dark_frame, text="Dark Mode", variable=dark_mode_var, command=toggle_theme, style="Action.TButton").pack(anchor="w")
123+
124+
result_frame = ttk.LabelFrame(root, text="Results", padding=15)
125+
result_frame.pack(fill="both", expand=True, padx=20, pady=20)
126+
127+
result_text = scrolledtext.ScrolledText(result_frame, state="disabled", font=("Consolas", 12))
128+
result_text.pack(fill="both", expand=True)
129+
130+
# =========================
131+
# Run App
132+
# =========================
133+
root.mainloop()

0 commit comments

Comments
 (0)