Luminous Lexicon Organizer Python GUI

👤 Sharing: AI
import tkinter as tk
from tkinter import ttk
from tkinter import messagebox
import json
import os

class LexiconOrganizer:
    def __init__(self, master):
        self.master = master
        master.title("Luminous Lexicon Organizer")
        master.geometry("600x400")

        self.data = {}
        self.filename = "lexicon.json"

        # Load data if the file exists
        if os.path.exists(self.filename):
            with open(self.filename, 'r') as f:
                try:
                    self.data = json.load(f)
                except json.JSONDecodeError:
                    messagebox.showerror("Error", "Could not load lexicon file.  File may be corrupt.")
                    self.data = {}

        # Entry fields and labels
        ttk.Label(master, text="Word:").grid(row=0, column=0, padx=5, pady=5, sticky='e')
        self.word_entry = ttk.Entry(master, width=30)
        self.word_entry.grid(row=0, column=1, padx=5, pady=5, sticky='w')

        ttk.Label(master, text="Definition:").grid(row=1, column=0, padx=5, pady=5, sticky='e')
        self.definition_entry = tk.Text(master, width=40, height=5)
        self.definition_entry.grid(row=1, column=1, padx=5, pady=5, sticky='w')

        # Buttons
        ttk.Button(master, text="Add/Update Word", command=self.add_word).grid(row=2, column=0, columnspan=2, pady=10)
        ttk.Button(master, text="Search", command=self.search_word).grid(row=3, column=0, padx=5, pady=5)
        ttk.Button(master, text="Delete", command=self.delete_word).grid(row=3, column=1, padx=5, pady=5)
        ttk.Button(master, text="Clear Fields", command=self.clear_fields).grid(row=4, column=0, columnspan=2, pady=10)
        ttk.Button(master, text="Details", command=self.show_details).grid(row=5, column=0, columnspan=2, pady=10)

        # Listbox for displaying words
        self.word_listbox = tk.Listbox(master, width=50, height=10)
        self.word_listbox.grid(row=6, column=0, columnspan=2, padx=5, pady=5)
        self.word_listbox.bind('<Double-Button-1>', self.select_word)

        # Populate the listbox
        self.update_listbox()

    def add_word(self):
        word = self.word_entry.get().strip()
        definition = self.definition_entry.get("1.0", 'end-1c').strip()

        if not word:
            messagebox.showerror("Error", "Word cannot be empty.")
            return

        self.data[word] = definition
        self.save_data()
        self.update_listbox()
        self.clear_fields()
        messagebox.showinfo("Success", f"Word '{word}' added/updated.")

    def search_word(self):
        word = self.word_entry.get().strip()
        if not word:
            messagebox.showerror("Error", "Please enter a word to search.")
            return

        if word in self.data:
            self.definition_entry.delete("1.0", tk.END)
            self.definition_entry.insert(tk.END, self.data[word])
        else:
            messagebox.showinfo("Not Found", f"Word '{word}' not found.")

    def delete_word(self):
        word = self.word_entry.get().strip()
        if not word:
            messagebox.showerror("Error", "Please enter a word to delete.")
            return

        if word in self.data:
            del self.data[word]
            self.save_data()
            self.update_listbox()
            self.clear_fields()
            messagebox.showinfo("Success", f"Word '{word}' deleted.")
        else:
            messagebox.showinfo("Not Found", f"Word '{word}' not found.")

    def clear_fields(self):
        self.word_entry.delete(0, tk.END)
        self.definition_entry.delete("1.0", tk.END)

    def save_data(self):
        with open(self.filename, 'w') as f:
            json.dump(self.data, f)

    def update_listbox(self):
        self.word_listbox.delete(0, tk.END)
        for word in sorted(self.data.keys()):
            self.word_listbox.insert(tk.END, word)

    def select_word(self, event):
        selected_word = self.word_listbox.get(self.word_listbox.curselection())
        self.word_entry.delete(0, tk.END)
        self.word_entry.insert(0, selected_word)
        self.search_word()

    def show_details(self):
        messagebox.showinfo("Details", "The Luminous Lexicon Organizer is a versatile tool designed to help you manage and organize your personal vocabulary or glossary. You can add words with their definitions, search for existing words, delete entries, and easily browse through your lexicon using the listbox.  Data is saved to a JSON file so your entries are persistent.")


root = tk.Tk()
organizer = LexiconOrganizer(root)
root.mainloop()
👁️ Viewed: 6

Comments