import os import random import sys import logging import tkinter as tk from tkinter import ttk, filedialog, scrolledtext import subprocess # Configure logging logging.basicConfig( level=logging.INFO, format='%(asctime)s - %(levelname)s - %(message)s', handlers=[ logging.FileHandler('app.log'), logging.StreamHandler() ] ) # Random code snippets CODE_SNIPPETS = [ "print('Hello, World!')", "for i in range(10): print(i)", "def greet(name): return f'Hello, {name}!'", "class Example: pass" ] class CodeGeneratorApp: def __init__(self, root): self.root = root self.root.title("Python Code Generator") self.root.geometry("800x600") self.current_output_folder = None self.create_widgets() def create_widgets(self): # Output Folder Selection self.output_folder_label = ttk.Label(self.root, text="Select Output Folder:") self.output_folder_label.pack(pady=5) self.output_folder_button = ttk.Button(self.root, text="Browse...", command=self.select_output_folder) self.output_folder_button.pack(pady=5) # Script Name Entry self.script_name_label = ttk.Label(self.root, text="Enter Script Name (without .py):") self.script_name_label.pack(pady=5) self.script_name_entry = ttk.Entry(self.root, width=50) self.script_name_entry.pack(pady=5) # Generate and Execute Buttons self.generate_button = ttk.Button(self.root, text="Generate Code", command=self.generate_code) self.generate_button.pack(pady=10) self.execute_button = ttk.Button(self.root, text="Execute Code", command=self.execute_code) self.execute_button.pack(pady=10) # Output Window self.output_frame = ttk.Frame(self.root) self.output_frame.pack(pady=10, fill='both', expand=True) self.output_label = ttk.Label(self.output_frame, text="Output:") self.output_label.pack(pady=5) self.output_text = scrolledtext.ScrolledText(self.output_frame, width=100, height=20) self.output_text.pack(pady=5) def select_output_folder(self): self.current_output_folder = filedialog.askdirectory() self.output_text.insert('1.0', f"Output folder set to: {self.current_output_folder}\n") def generate_code(self): if not self.current_output_folder: self.output_text.insert('1.0', "Please select an output folder first.\n") return script_name = self.script_name_entry.get() if not script_name: script_name = f"script_{random.randint(1000, 9999)}" codeSnippet = random.choice(CODE_SNIPPETS) scriptcontent = f"import logging\nlogging.basicConfig(level=logging.INFO)\n\n{codeSnippet}" try: with open(os.path.join(self.current_output_folder, f"{script_name}.py"), 'w') as f: f.write(scriptcontent) self.output_text.insert('1.0', f"Script generated successfully: {script_name}.py\n") except Exception as e: self.output_text.insert('1.0', f"Error generating script: {str(e)}\n") def execute_code(self): script_name = self.script_name_entry.get() if not script_name: self.output_text.insert('1.0', "Please name the script first.\n") return script_path = os.path.join(self.current_output_folder, f"{script_name}.py") if not os.path.exists(script_path): self.output_text.insert('1.0', f"Script not found at: {script_path}\n") return try: process = subprocess.Popen([sys.executable, script_path], stdout=subprocess.PIPE, stderr=subprocess.PIPE, text=True) output, error = process.communicate() if output: self.output_text.insert('1.0', f"Output:\n{output}\n") if error: self.output_text.insert('1.0', f"Error:\n{error}\n") except Exception as e: self.output_text.insert('1.0', f"Execution error: {str(e)}\n") def main(): root = tk.Tk() app = CodeGeneratorApp(root) root.mainloop() if __name__ == "__main__": main()