Jwrockon's picture
Create app.py
f26b302 verified
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()