Xyruxify Python GUI
👤 Sharing: AI
import tkinter as tk
from tkinter import ttk
import random
import time
import threading
class RandomDataGeneratorApp:
def __init__(self, master):
self.master = master
master.title("Random Data Generator & Visualizer")
# --- Data Generation Parameters ---
self.data_size_label = ttk.Label(master, text="Data Size:")
self.data_size_label.grid(row=0, column=0, padx=5, pady=5, sticky=tk.W)
self.data_size_entry = ttk.Entry(master)
self.data_size_entry.grid(row=0, column=1, padx=5, pady=5, sticky=tk.E)
self.data_size_entry.insert(0, "100") # Default value
self.data_type_label = ttk.Label(master, text="Data Type:")
self.data_type_label.grid(row=1, column=0, padx=5, pady=5, sticky=tk.W)
self.data_type_combo = ttk.Combobox(master, values=["Integer", "Float", "String"])
self.data_type_combo.grid(row=1, column=1, padx=5, pady=5, sticky=tk.E)
self.data_type_combo.set("Integer") # Default value
self.update_interval_label = ttk.Label(master, text="Update Interval (ms):")
self.update_interval_label.grid(row=2, column=0, padx=5, pady=5, sticky=tk.W)
self.update_interval_entry = ttk.Entry(master)
self.update_interval_entry.grid(row=2, column=1, padx=5, pady=5, sticky=tk.E)
self.update_interval_entry.insert(0, "500") # Default value
# --- Generation & Display ---
self.generate_button = ttk.Button(master, text="Generate Data", command=self.start_data_generation)
self.generate_button.grid(row=3, column=0, columnspan=2, padx=5, pady=5)
self.data_text = tk.Text(master, height=10, width=40)
self.data_text.grid(row=4, column=0, columnspan=2, padx=5, pady=5)
self.stop_button = ttk.Button(master, text="Stop Generation", command=self.stop_data_generation, state=tk.DISABLED)
self.stop_button.grid(row=5, column=0, columnspan=2, padx=5, pady=5)
# --- Visualization (Simple Bar Chart) ---
self.canvas = tk.Canvas(master, width=400, height=200, bg="white")
self.canvas.grid(row=6, column=0, columnspan=2, padx=5, pady=5)
self.max_bar_height = 180 #Canvas height - margin
# --- Details Button ---
self.details_button = ttk.Button(master, text="Details", command=self.show_details)
self.details_button.grid(row=7, column=0, columnspan=2, padx=5, pady=5)
self.running = False # Flag to control the data generation thread
self.data_generation_thread = None # Store the thread object
def start_data_generation(self):
if not self.running:
self.running = True
self.generate_button['state'] = tk.DISABLED
self.stop_button['state'] = tk.NORMAL
self.data_generation_thread = threading.Thread(target=self.generate_data)
self.data_generation_thread.daemon = True # Allow main thread to exit even if this thread is running
self.data_generation_thread.start()
def stop_data_generation(self):
self.running = False
self.generate_button['state'] = tk.NORMAL
self.stop_button['state'] = tk.DISABLED
def generate_data(self):
try:
data_size = int(self.data_size_entry.get())
data_type = self.data_type_combo.get()
update_interval = int(self.update_interval_entry.get())
except ValueError:
self.display_error("Invalid input. Please enter valid numbers.")
self.stop_data_generation()
return
while self.running:
data = []
for _ in range(data_size):
if data_type == "Integer":
data.append(random.randint(1, 100))
elif data_type == "Float":
data.append(random.uniform(0.0, 100.0))
elif data_type == "String":
data.append(random.choice(["apple", "banana", "cherry", "date", "fig"]))
self.display_data(data)
self.visualize_data(data)
time.sleep(update_interval / 1000)
def display_data(self, data):
self.data_text.delete("1.0", tk.END)
self.data_text.insert(tk.END, str(data))
def visualize_data(self, data):
self.canvas.delete("all") # Clear previous bars
if not data:
return
bar_width = 400 / len(data) #canvas width / number of data points
max_value = max(data)
for i, value in enumerate(data):
#Scale the value to the canvas height
height = (value / max_value) * self.max_bar_height if max_value > 0 else 0
x0 = i * bar_width
y0 = 200 - height #canvas height - scaled height
x1 = (i + 1) * bar_width
y1 = 200
self.canvas.create_rectangle(x0, y0, x1, y1, fill="blue")
def display_error(self, message):
self.data_text.delete("1.0", tk.END)
self.data_text.insert(tk.END, "Error: " + message)
def show_details(self):
details_window = tk.Toplevel(self.master)
details_window.title("Program Details")
details_text = tk.Text(details_window, height=15, width=60)
details_text.pack(padx=10, pady=10)
details_text.insert(tk.END, """
Xyruxify: Random Data Generator & Visualizer
This program generates random data of specified types (Integer, Float, String) and displays it in both text format and as a simple bar chart.
Functionality:
1. Data Generation: Configure the size and type of random data to generate.
2. Real-time Visualization: The generated data is displayed as a bar chart that updates dynamically.
3. Error Handling: The program handles invalid input gracefully, preventing crashes.
4. Dynamic Updates: The update interval can be adjusted to control the speed of data generation and visualization.
This application provides a basic, but versatile, framework for demonstrating data generation and visualization concepts.
""")
details_text.config(state=tk.DISABLED) # Make the text read-only
root = tk.Tk()
app = RandomDataGeneratorApp(root)
root.mainloop()
👁️ Viewed: 5
Comments