Jwrockon's picture
Create app.py
f26b302 verified
raw
history blame contribute delete
4.2 kB
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()