· 11 months ago · Oct 26, 2024, 04:31 AM
1import tkinter as tk
2from tkinter import messagebox, Text, Scrollbar
3import sqlite3
4
5# Connect to the SQLite database
6def connect_db():
7 conn = sqlite3.connect("ScriptsData.db")
8 cursor = conn.cursor()
9 cursor.execute("""
10 CREATE TABLE IF NOT EXISTS scripts (
11 id INTEGER PRIMARY KEY AUTOINCREMENT,
12 name TEXT UNIQUE,
13 content TEXT
14 )
15 """)
16 conn.commit()
17 conn.close()
18
19# Add a new script to the database
20def add_script():
21 name = name_entry.get().strip()
22 content = content_text.get("1.0", tk.END).strip()
23 if name and content:
24 try:
25 conn = sqlite3.connect("ScriptsData.db")
26 cursor = conn.cursor()
27 cursor.execute("INSERT INTO scripts (name, content) VALUES (?, ?)", (name, content))
28 conn.commit()
29 conn.close()
30 messagebox.showinfo("Success", "Script added successfully!")
31 name_entry.delete(0, tk.END)
32 content_text.delete("1.0", tk.END)
33 show_all_scripts()
34 except sqlite3.IntegrityError:
35 messagebox.showerror("Error", "Script name already exists.")
36 else:
37 messagebox.showwarning("Input Error", "Please enter both name and content.")
38
39# Search for a script by name
40def search_script():
41 name = search_entry.get().strip()
42 if name:
43 conn = sqlite3.connect("ScriptsData.db")
44 cursor = conn.cursor()
45 cursor.execute("SELECT content FROM scripts WHERE name = ?", (name,))
46 result = cursor.fetchone()
47 conn.close()
48 if result:
49 content_text.config(state="normal")
50 content_text.delete("1.0", tk.END)
51 content_text.insert(tk.END, result[0])
52 content_text.config(state="normal") # Keep editable
53 else:
54 messagebox.showinfo("Not Found", "Script not found.")
55 else:
56 messagebox.showwarning("Input Error", "Please enter a script name to search.")
57
58# Show all scripts
59def show_all_scripts():
60 conn = sqlite3.connect("ScriptsData.db")
61 cursor = conn.cursor()
62 cursor.execute("SELECT name FROM scripts")
63 results = cursor.fetchall()
64 conn.close()
65 script_list.delete(0, tk.END)
66 for row in results:
67 script_list.insert(tk.END, row[0])
68
69# Display selected script content
70def display_script_content(event):
71 try:
72 selected_name = script_list.get(script_list.curselection())
73 conn = sqlite3.connect("ScriptsData.db")
74 cursor = conn.cursor()
75 cursor.execute("SELECT content FROM scripts WHERE name = ?", (selected_name,))
76 result = cursor.fetchone()
77 conn.close()
78 content_text.config(state="normal")
79 content_text.delete("1.0", tk.END)
80 if result:
81 content_text.insert(tk.END, result[0])
82 content_text.config(state="normal") # Keep editable
83 except tk.TclError:
84 pass # No item selected
85
86# Save the edited content back to the database
87def save_script():
88 if script_list.curselection():
89 selected_name = script_list.get(script_list.curselection())
90 new_content = content_text.get("1.0", tk.END).strip()
91 if new_content:
92 conn = sqlite3.connect("ScriptsData.db")
93 cursor = conn.cursor()
94 cursor.execute("UPDATE scripts SET content = ? WHERE name = ?", (new_content, selected_name))
95 conn.commit()
96 conn.close()
97 messagebox.showinfo("Success", "Script updated successfully!")
98 else:
99 messagebox.showwarning("Input Error", "Content cannot be empty.")
100 else:
101 messagebox.showwarning("Selection Error", "Please select a script to save changes.")
102
103# Delete the selected script from the database
104def delete_script():
105 if script_list.curselection():
106 selected_name = script_list.get(script_list.curselection())
107 confirm = messagebox.askyesno("Confirm Delete", f"Are you sure you want to delete '{selected_name}'?")
108 if confirm:
109 conn = sqlite3.connect("ScriptsData.db")
110 cursor = conn.cursor()
111 cursor.execute("DELETE FROM scripts WHERE name = ?", (selected_name,))
112 conn.commit()
113 conn.close()
114 messagebox.showinfo("Success", "Script deleted successfully!")
115 show_all_scripts() # Refresh the script list
116 content_text.config(state="normal")
117 content_text.delete("1.0", tk.END) # Clear the content field
118 content_text.config(state="normal") # Keep editable
119 else:
120 messagebox.showwarning("Selection Error", "Please select a script first to delete.")
121
122# Copy content_text field to clipboard
123def copy_to_clipboard():
124 content = content_text.get("1.0", tk.END).strip()
125 if content:
126 root.clipboard_clear() # Clear the clipboard
127 root.clipboard_append(content) # Append content to the clipboard
128 messagebox.showinfo("Success", "Content copied to clipboard!")
129 else:
130 messagebox.showwarning("Clipboard Error", "No content to copy.")
131
132
133# GUI Setup
134connect_db()
135root = tk.Tk()
136root.title("Najeeb Scripts Database")
137root.geometry("900x620")
138root.configure(bg="#f0f0f5")
139
140# Top Row: Search, Add, Show All in One Line
141style_label = {"bg": "#f0f0f5", "fg": "#333333", "font": ("Arial", 11)}
142style_button = {"bg": "#4CAF50", "fg": "white", "font": ("Arial", 10, "bold"), "width": 14, "padx": 2, "pady": 2}
143
144tk.Label(root, text="Search Script Name:", **style_label).grid(row=0, column=3, padx=5, pady=5, sticky="w")
145search_entry = tk.Entry(root, width=15, font=("Arial", 11))
146search_entry.grid(row=0, column=4, padx=5, pady=5, sticky="w")
147
148search_button = tk.Button(root, text="Search", command=search_script, **style_button)
149search_button.grid(row=0, column=5, padx=5, pady=5, sticky="w")
150
151tk.Label(root, text="Add New Script DataBase:", **style_label).grid(row=0, column=0, padx=5, pady=5, sticky="w")
152name_entry = tk.Entry(root, width=15, font=("Arial", 11))
153name_entry.grid(row=0, column=1, padx=5, pady=5, sticky="w")
154
155add_button = tk.Button(root, text="Add Script", command=add_script, **style_button)
156add_button.grid(row=0, column=2, padx=5, pady=5, sticky="w")
157
158show_all_button = tk.Button(root, text="Show All Scripts", command=show_all_scripts, **style_button)
159show_all_button.grid(row=1, column=0, padx=5, pady=5, sticky="w")
160
161# Save Button
162save_button = tk.Button(root, text="Save", command=save_script, **style_button)
163save_button.grid(row=1, column=1, padx=5, pady=5, sticky="w")
164
165# Second Row: Delete
166delete_button = tk.Button(root, text="Delete", command=delete_script, **style_button)
167delete_button.grid(row=1, column=2, padx=5, pady=5, sticky="w")
168
169# Copy to Clipboard Button
170copy_button = tk.Button(root, text="Copy to Clipboard", command=copy_to_clipboard, **style_button)
171copy_button.grid(row=1, column=3, padx=3, pady=5, sticky="w")
172
173# Script List
174list_frame = tk.Frame(root)
175list_frame.grid(row=2, column=0, rowspan=6, padx=5, pady=5, sticky="n")
176script_list = tk.Listbox(list_frame, width=20, height=29, font=("Arial", 11))
177script_list.pack(side="left", fill="y")
178scrollbar = Scrollbar(list_frame, orient="vertical", command=script_list.yview)
179scrollbar.pack(side="right", fill="y")
180script_list.config(yscrollcommand=scrollbar.set)
181script_list.bind("<<ListboxSelect>>", display_script_content)
182
183# Content Field
184content_frame = tk.Frame(root)
185content_frame.grid(row=2, column=1, rowspan=6, columnspan=6, padx=5, pady=5, sticky="n")
186content_text = Text(content_frame, width=85, height=30, font=("Arial", 11), wrap="word", state="normal") # Editable
187content_text.pack(side="left", fill="both", expand=True)
188content_scrollbar = Scrollbar(content_frame, orient="vertical", command=content_text.yview)
189content_scrollbar.pack(side="right", fill="y")
190content_text.config(yscrollcommand=content_scrollbar.set)
191
192# Run main loop
193root.mainloop()
194