Tachyon Text Toolkit Python GUI
👤 Sharing: AI
import tkinter as tk
from tkinter import ttk
from tkinter import filedialog, messagebox
import re
import random
class TextToolkitApp:
def __init__(self, master):
self.master = master
master.title("Tachyon Text Toolkit")
self.text_area = tk.Text(master, wrap=tk.WORD, undo=True)
self.text_area.pack(expand=True, fill=tk.BOTH)
self.menu_bar = tk.Menu(master)
self.file_menu = tk.Menu(self.menu_bar, tearoff=0)
self.file_menu.add_command(label="Open", command=self.open_file)
self.file_menu.add_command(label="Save", command=self.save_file)
self.file_menu.add_separator()
self.file_menu.add_command(label="Exit", command=master.quit)
self.menu_bar.add_cascade(label="File", menu=self.file_menu)
self.edit_menu = tk.Menu(self.menu_bar, tearoff=0)
self.edit_menu.add_command(label="Cut", command=lambda: self.text_area.event_generate("<<Cut>>"))
self.edit_menu.add_command(label="Copy", command=lambda: self.text_area.event_generate("<<Copy>>"))
self.edit_menu.add_command(label="Paste", command=lambda: self.text_area.event_generate("<<Paste>>"))
self.edit_menu.add_command(label="Undo", command=self.text_area.edit_undo)
self.edit_menu.add_command(label="Redo", command=self.text_area.edit_redo)
self.menu_bar.add_cascade(label="Edit", menu=self.edit_menu)
self.tools_menu = tk.Menu(self.menu_bar, tearoff=0)
self.tools_menu.add_command(label="Word Count", command=self.word_count)
self.tools_menu.add_command(label="Character Count", command=self.character_count)
self.tools_menu.add_command(label="Reverse Text", command=self.reverse_text)
self.tools_menu.add_command(label="Shuffle Lines", command=self.shuffle_lines)
self.tools_menu.add_command(label="Remove Duplicate Lines", command=self.remove_duplicate_lines)
self.tools_menu.add_command(label="Sort Lines", command=self.sort_lines)
self.tools_menu.add_command(label="Find and Replace", command=self.find_and_replace)
self.menu_bar.add_cascade(label="Tools", menu=self.tools_menu)
self.help_menu = tk.Menu(self.menu_bar, tearoff=0)
self.help_menu.add_command(label="About", command=self.show_about)
self.menu_bar.add_cascade(label="Help", menu=self.help_menu)
master.config(menu=self.menu_bar)
def open_file(self):
filepath = filedialog.askopenfilename(filetypes=[("Text Files", "*.txt"), ("All Files", "*")])
if filepath:
try:
with open(filepath, "r") as f:
content = f.read()
self.text_area.delete("1.0", tk.END)
self.text_area.insert(tk.END, content)
except Exception as e:
messagebox.showerror("Error", f"Could not open file:\n{e}")
def save_file(self):
filepath = filedialog.asksaveasfilename(defaultextension=".txt", filetypes=[("Text Files", "*.txt"), ("All Files", "*")])
if filepath:
try:
with open(filepath, "w") as f:
content = self.text_area.get("1.0", tk.END)
f.write(content)
except Exception as e:
messagebox.showerror("Error", f"Could not save file:\n{e}")
def word_count(self):
text = self.text_area.get("1.0", tk.END)
words = re.findall(r'\b\w+\b', text.lower())
messagebox.showinfo("Word Count", f"Word Count: {len(words)}")
def character_count(self):
text = self.text_area.get("1.0", tk.END)
messagebox.showinfo("Character Count", f"Character Count: {len(text)}")
def reverse_text(self):
text = self.text_area.get("1.0", tk.END)
reversed_text = text[::-1]
self.text_area.delete("1.0", tk.END)
self.text_area.insert(tk.END, reversed_text)
def shuffle_lines(self):
text = self.text_area.get("1.0", tk.END)
lines = text.splitlines()
random.shuffle(lines)
shuffled_text = "\n".join(lines)
self.text_area.delete("1.0", tk.END)
self.text_area.insert(tk.END, shuffled_text)
def remove_duplicate_lines(self):
text = self.text_area.get("1.0", tk.END)
lines = text.splitlines()
unique_lines = list(dict.fromkeys(lines))
unique_text = "\n".join(unique_lines)
self.text_area.delete("1.0", tk.END)
self.text_area.insert(tk.END, unique_text)
def sort_lines(self):
text = self.text_area.get("1.0", tk.END)
lines = text.splitlines()
lines.sort()
sorted_text = "\n".join(lines)
self.text_area.delete("1.0", tk.END)
self.text_area.insert(tk.END, sorted_text)
def find_and_replace(self):
FindReplaceDialog(self.master, self.text_area)
def show_about(self):
AboutDialog(self.master)
class FindReplaceDialog(tk.Toplevel):
def __init__(self, parent, text_area):
super().__init__(parent)
self.text_area = text_area
self.title("Find and Replace")
self.geometry("300x150")
self.find_label = tk.Label(self, text="Find:")
self.find_label.grid(row=0, column=0, padx=5, pady=5)
self.find_entry = tk.Entry(self, width=25)
self.find_entry.grid(row=0, column=1, padx=5, pady=5)
self.replace_label = tk.Label(self, text="Replace:")
self.replace_label.grid(row=1, column=0, padx=5, pady=5)
self.replace_entry = tk.Entry(self, width=25)
self.replace_entry.grid(row=1, column=1, padx=5, pady=5)
self.find_button = tk.Button(self, text="Find and Replace", command=self.find_replace)
self.find_button.grid(row=2, column=0, columnspan=2, padx=5, pady=5)
def find_replace(self):
find_text = self.find_entry.get()
replace_text = self.replace_entry.get()
text = self.text_area.get("1.0", tk.END)
new_text = text.replace(find_text, replace_text)
self.text_area.delete("1.0", tk.END)
self.text_area.insert(tk.END, new_text)
self.destroy()
class AboutDialog(tk.Toplevel):
def __init__(self, parent):
super().__init__(parent)
self.title("About Tachyon Text Toolkit")
self.geometry("300x200")
about_text = """Tachyon Text Toolkit is a versatile text manipulation tool.
It provides a range of features for text editing, including:
- Opening and saving files
- Cutting, copying, and pasting text
- Word and character counts
- Reversing text
- Shuffling lines
- Removing duplicate lines
- Sorting lines
- Find and Replace
Developed with Python and Tkinter."
about_label = tk.Label(self, text=about_text, justify=tk.LEFT)
about_label.pack(padx=10, pady=10)
ok_button = tk.Button(self, text="OK", command=self.destroy)
ok_button.pack(pady=5)
root = tk.Tk()
app = TextToolkitApp(root)
root.mainloop()
👁️ Viewed: 5
Comments