File size: 4,198 Bytes
f26b302
 
 
 
 
 
 
01f006c
f26b302
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
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()