Vibrant Nexus Python GUI

👤 Sharing: AI
import tkinter as tk
from tkinter import ttk, filedialog, messagebox
import os
import hashlib
import datetime
import random

class VibrantNexusApp:
    def __init__(self, root):
        self.root = root
        self.root.title("Vibrant Nexus")
        self.root.geometry("800x600")
        self.root.configure(bg='#f0f0f0')

        self.style = ttk.Style()
        self.style.theme_use('clam')

        self.create_widgets()

    def create_widgets(self):
        # Notebook for Tab Management
        self.notebook = ttk.Notebook(self.root)
        self.notebook.pack(pady=10, padx=10, fill='both', expand=True)

        # Tab 1: File Integrity Checker
        self.file_tab = ttk.Frame(self.notebook)
        self.notebook.add(self.file_tab, text='File Integrity Checker')
        self.create_file_tab_content(self.file_tab)

        # Tab 2: Text Encryption/Decryption
        self.text_tab = ttk.Frame(self.notebook)
        self.notebook.add(self.text_tab, text='Text Encryption/Decryption')
        self.create_text_tab_content(self.text_tab)

        # Tab 3: Random Data Generator
        self.random_tab = ttk.Frame(self.notebook)
        self.notebook.add(self.random_tab, text='Random Data Generator')
        self.create_random_tab_content(self.random_tab)

        # Details Button (Universal)
        self.details_button = tk.Button(self.root, text="Details", command=self.show_details, bg='#4CAF50', fg='white', font=('Arial', 12, 'bold'), relief=tk.RAISED, bd=2)
        self.details_button.pack(pady=10)

    def create_file_tab_content(self, tab):
        # File Selection
        self.file_label = ttk.Label(tab, text='Select File:')
        self.file_label.grid(row=0, column=0, padx=5, pady=5, sticky='w')
        self.file_path_var = tk.StringVar()
        self.file_path_entry = ttk.Entry(tab, textvariable=self.file_path_var, width=50)
        self.file_path_entry.grid(row=0, column=1, padx=5, pady=5, sticky='we')
        self.file_button = ttk.Button(tab, text='Browse', command=self.browse_file)
        self.file_button.grid(row=0, column=2, padx=5, pady=5)

        # Hash Algorithm Selection
        self.hash_label = ttk.Label(tab, text='Select Hash Algorithm:')
        self.hash_label.grid(row=1, column=0, padx=5, pady=5, sticky='w')
        self.hash_algorithm_var = tk.StringVar(value='sha256')
        self.hash_algorithm_combo = ttk.Combobox(tab, textvariable=self.hash_algorithm_var, values=['md5', 'sha1', 'sha256', 'sha512'], state='readonly')
        self.hash_algorithm_combo.grid(row=1, column=1, padx=5, pady=5, sticky='we')

        # Calculate Hash Button
        self.calculate_button = ttk.Button(tab, text='Calculate Hash', command=self.calculate_hash)
        self.calculate_button.grid(row=2, column=1, padx=5, pady=5)

        # Hash Result
        self.hash_result_label = ttk.Label(tab, text='Hash Result:')
        self.hash_result_label.grid(row=3, column=0, padx=5, pady=5, sticky='w')
        self.hash_result_text = tk.Text(tab, height=5, width=60)
        self.hash_result_text.grid(row=3, column=1, padx=5, pady=5, sticky='we')
        self.hash_result_text.config(state=tk.DISABLED)

    def create_text_tab_content(self, tab):
        # Encryption/Decryption Key
        self.key_label = ttk.Label(tab, text='Encryption Key:')
        self.key_label.grid(row=0, column=0, padx=5, pady=5, sticky='w')
        self.key_entry = ttk.Entry(tab, width=30)
        self.key_entry.grid(row=0, column=1, padx=5, pady=5, sticky='we')

        # Text Input
        self.text_label = ttk.Label(tab, text='Enter Text:')
        self.text_label.grid(row=1, column=0, padx=5, pady=5, sticky='w')
        self.text_input = tk.Text(tab, height=5, width=40)
        self.text_input.grid(row=1, column=1, padx=5, pady=5, sticky='we')

        # Encryption/Decryption Buttons
        self.encrypt_button = ttk.Button(tab, text='Encrypt', command=self.encrypt_text)
        self.encrypt_button.grid(row=2, column=0, padx=5, pady=5)
        self.decrypt_button = ttk.Button(tab, text='Decrypt', command=self.decrypt_text)
        self.decrypt_button.grid(row=2, column=1, padx=5, pady=5)

        # Output Text
        self.output_label = ttk.Label(tab, text='Output Text:')
        self.output_label.grid(row=3, column=0, padx=5, pady=5, sticky='w')
        self.output_text = tk.Text(tab, height=5, width=40)
        self.output_text.grid(row=3, column=1, padx=5, pady=5, sticky='we')
        self.output_text.config(state=tk.DISABLED)

    def create_random_tab_content(self, tab):
        # Data Type Selection
        self.data_type_label = ttk.Label(tab, text='Select Data Type:')
        self.data_type_label.grid(row=0, column=0, padx=5, pady=5, sticky='w')
        self.data_type_var = tk.StringVar(value='string')
        self.data_type_combo = ttk.Combobox(tab, textvariable=self.data_type_var, values=['string', 'integer', 'float'], state='readonly')
        self.data_type_combo.grid(row=0, column=1, padx=5, pady=5, sticky='we')

        # Length/Range Input
        self.length_label = ttk.Label(tab, text='Length/Range:')
        self.length_label.grid(row=1, column=0, padx=5, pady=5, sticky='w')
        self.length_entry = ttk.Entry(tab, width=20)
        self.length_entry.grid(row=1, column=1, padx=5, pady=5, sticky='we')

        # Generate Button
        self.generate_button = ttk.Button(tab, text='Generate', command=self.generate_random_data)
        self.generate_button.grid(row=2, column=1, padx=5, pady=5)

        # Output Data
        self.data_label = ttk.Label(tab, text='Generated Data:')
        self.data_label.grid(row=3, column=0, padx=5, pady=5, sticky='w')
        self.data_text = tk.Text(tab, height=5, width=40)
        self.data_text.grid(row=3, column=1, padx=5, pady=5, sticky='we')
        self.data_text.config(state=tk.DISABLED)

    def browse_file(self):
        filename = filedialog.askopenfilename()
        self.file_path_var.set(filename)

    def calculate_hash(self):
        filename = self.file_path_var.get()
        algorithm = self.hash_algorithm_var.get()

        if not filename:
            messagebox.showerror("Error", "Please select a file.")
            return

        try:
            hasher = hashlib.new(algorithm)
            with open(filename, 'rb') as afile:
                buf = afile.read(65536)
                while len(buf) > 0:
                    hasher.update(buf)
                    buf = afile.read(65536)
            hash_value = hasher.hexdigest()
            self.hash_result_text.config(state=tk.NORMAL)
            self.hash_result_text.delete('1.0', tk.END)
            self.hash_result_text.insert(tk.END, hash_value)
            self.hash_result_text.config(state=tk.DISABLED)
        except Exception as e:
            messagebox.showerror("Error", str(e))

    def encrypt_text(self):
        key = self.key_entry.get()
        text = self.text_input.get('1.0', tk.END).strip()

        if not key:
            messagebox.showerror("Error", "Please enter an encryption key.")
            return

        if not text:
            messagebox.showerror("Error", "Please enter text to encrypt.")
            return

        encrypted_text = ''.join([chr(ord(c) + ord(key[i % len(key)])) for i, c in enumerate(text)])
        self.output_text.config(state=tk.NORMAL)
        self.output_text.delete('1.0', tk.END)
        self.output_text.insert(tk.END, encrypted_text)
        self.output_text.config(state=tk.DISABLED)

    def decrypt_text(self):
        key = self.key_entry.get()
        text = self.text_input.get('1.0', tk.END).strip()

        if not key:
            messagebox.showerror("Error", "Please enter an encryption key.")
            return

        if not text:
            messagebox.showerror("Error", "Please enter text to decrypt.")
            return

        decrypted_text = ''.join([chr(ord(c) - ord(key[i % len(key)])) for i, c in enumerate(text)])
        self.output_text.config(state=tk.NORMAL)
        self.output_text.delete('1.0', tk.END)
        self.output_text.insert(tk.END, decrypted_text)
        self.output_text.config(state=tk.DISABLED)

    def generate_random_data(self):
        data_type = self.data_type_var.get()
        length_range = self.length_entry.get()

        try:
            if data_type == 'string':
                length = int(length_range)
                random_data = ''.join(random.choice('abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ0123456789') for _ in range(length))
            elif data_type == 'integer':
                min_val, max_val = map(int, length_range.split(','))
                random_data = str(random.randint(min_val, max_val))
            elif data_type == 'float':
                min_val, max_val = map(float, length_range.split(','))
                random_data = str(random.uniform(min_val, max_val))
            else:
                raise ValueError("Invalid data type.")

            self.data_text.config(state=tk.NORMAL)
            self.data_text.delete('1.0', tk.END)
            self.data_text.insert(tk.END, random_data)
            self.data_text.config(state=tk.DISABLED)

        except ValueError as e:
            messagebox.showerror("Error", str(e))
        except Exception as e:
            messagebox.showerror("Error", str(e))

    def show_details(self):
        details_text = """
Vibrant Nexus is a versatile tool designed for various tasks:

1.  **File Integrity Checker:**
    -   Allows users to select a file and calculate its hash using different algorithms (MD5, SHA1, SHA256, SHA512).
    -   This ensures file integrity by verifying that the hash value matches the original.

2.  **Text Encryption/Decryption:**
    -   Enables users to encrypt and decrypt text using a key-based substitution cipher.
    -   The key is used to shift each character in the text, making it unreadable without the key.

3.  **Random Data Generator:**
    -   Generates random data of different types (string, integer, float) based on user-defined parameters.
    -   For strings, the user specifies the length. For integers and floats, the user provides a range.

This application provides essential tools for security and data manipulation in a user-friendly interface.
"""
        messagebox.showinfo("Details", details_text)

if __name__ == "__main__":
    root = tk.Tk()
    app = VibrantNexusApp(root)
    root.mainloop()
👁️ Viewed: 8

Comments