Spaces:
Sleeping
Sleeping
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() |