Shadow Agency Code: Difference between revisions

From Chrysalis Archive
Jump to navigation Jump to search
Added initial app directory on file open/save-as.
Line 10: Line 10:
*Displays help file.
*Displays help file.
   
   
<pre style="background-color:wheat; border:1px outset azure; padding:40px 40px; max-width:760px; margin:40px; ">
<pre style="background-color:wheat; border:1px outset azure; padding:10px 40px; max-width:760px; margin:40px; ">
import os
import tkinter as tk
import tkinter as tk
from tkinter import filedialog
from tkinter import filedialog
import webbrowser
import webbrowser
from prompt_engineer.utils.ini_file import INIFile
from prompt_engineer.utils.ini_file import INIFile


class PromptEngineerApp(tk.Tk):
class PromptEngineerApp(tk.Tk):
Line 65: Line 68:


     def open_home_site(self):
     def open_home_site(self):
         url = "https://groupKOS.com/chrysalis/Prompt_Engineer"
         url = "https://groupkos.com/chrysalis/index.php/PromptEngineer"
         webbrowser.open(url)
         webbrowser.open(url)


Line 80: Line 83:


     def file_open(self):
     def file_open(self):
         file_path = filedialog.askopenfilename()
        initial_dir = os.path.dirname(os.path.abspath(__file__))
         file_path = filedialog.askopenfilename(initialdir=initial_dir)
         if file_path:
         if file_path:
             try:
             try:
Line 91: Line 95:
                 self.text_area.delete(1.0, tk.END)
                 self.text_area.delete(1.0, tk.END)
                 self.text_area.insert(tk.END, "File not found.")
                 self.text_area.insert(tk.END, "File not found.")
 
               
     def file_save(self):
     def file_save(self):
         if self.file_path:
         if self.file_path:
Line 105: Line 109:


     def file_save_as(self):
     def file_save_as(self):
         file_path = filedialog.asksaveasfilename(defaultextension='.txt')
        initial_dir = os.path.dirname(os.path.abspath(__file__))
         file_path = filedialog.asksaveasfilename(defaultextension='.txt', initialdir=initial_dir)
         if file_path:
         if file_path:
             content = self.text_area.get(1.0, tk.END)
             content = self.text_area.get(1.0, tk.END)
Line 115: Line 120:
                 self.text_area.delete(1.0, tk.END)
                 self.text_area.delete(1.0, tk.END)
                 self.text_area.insert(tk.END, "Error occurred while saving the file.")
                 self.text_area.insert(tk.END, "Error occurred while saving the file.")
 
               
     def file_close(self):
     def file_close(self):
         self.file_path = None
         self.file_path = None

Revision as of 18:01, 12 May 2024


main.py

©XenoEngineer 17:34, 12 May 2024 (UTC)

  • Hello-world app-framework.
  • Persists size/position of window.
  • Loads/saves text to edit window.
  • Browses to home page
  • Displays help file.
import os
import tkinter as tk
from tkinter import filedialog
import webbrowser

from prompt_engineer.utils.ini_file import INIFile


class PromptEngineerApp(tk.Tk):
    def __init__(self, config_file):
        super().__init__()
        self.config = INIFile(config_file)
        self.load_window_settings()
        self.create_widgets()
        self.create_menu()
        self.file_path = None

    def load_window_settings(self):
        self.geometry(self.config.get('Window', 'geometry', '800x600'))
        self.title(self.config.get('Window', 'title', 'PromptEngineer'))

    def create_widgets(self):
        self.text_area = tk.Text(self)
        self.text_area.pack(fill=tk.BOTH, expand=True)

    def save_window_settings(self):
        self.config.set('Window', 'geometry', self.geometry())
        self.config.save()

    def destroy(self):
        self.save_window_settings()
        super().destroy()

    def create_menu(self):
        menubar = tk.Menu(self)
        self.configure(menu=menubar)

        self.create_file_menu(menubar)
        self.create_tools_menu(menubar)

    def create_file_menu(self, menubar):
        file_menu = tk.Menu(menubar, tearoff=0)
        menubar.add_cascade(label="File", menu=file_menu)
        file_menu.add_command(label="Open", command=self.file_open)
        file_menu.add_command(label="Save", command=self.file_save)
        file_menu.add_command(label="Save As", command=self.file_save_as)
        file_menu.add_command(label="Close", command=self.file_close)
        file_menu.add_separator()
        file_menu.add_command(label="Exit", command=self.destroy)

    def create_tools_menu(self, menubar):
        tools_menu = tk.Menu(menubar, tearoff=0)
        menubar.add_cascade(label="Tools", menu=tools_menu)
        tools_menu.add_command(label="Home Site", command=self.open_home_site)
        tools_menu.add_command(label="Help", command=self.open_help)

    def open_home_site(self):
        url = "https://groupkos.com/chrysalis/index.php/PromptEngineer"
        webbrowser.open(url)

    def open_help(self):
        file_path = "docs/README.md"
        try:
            with open(file_path, 'r') as file:
                content = file.read()
                self.text_area.delete(1.0, tk.END)
                self.text_area.insert(tk.END, content)
        except FileNotFoundError:
            self.text_area.delete(1.0, tk.END)
            self.text_area.insert(tk.END, "Help file not found.")

    def file_open(self):
        initial_dir = os.path.dirname(os.path.abspath(__file__))
        file_path = filedialog.askopenfilename(initialdir=initial_dir)
        if file_path:
            try:
                with open(file_path, 'r') as file:
                    content = file.read()
                    self.text_area.delete(1.0, tk.END)
                    self.text_area.insert(tk.END, content)
                    self.file_path = file_path
            except FileNotFoundError:
                self.text_area.delete(1.0, tk.END)
                self.text_area.insert(tk.END, "File not found.")
                
    def file_save(self):
        if self.file_path:
            content = self.text_area.get(1.0, tk.END)
            try:
                with open(self.file_path, 'w') as file:
                    file.write(content)
            except IOError:
                self.text_area.delete(1.0, tk.END)
                self.text_area.insert(tk.END, "Error occurred while saving the file.")
        else:
            self.file_save_as()

    def file_save_as(self):
        initial_dir = os.path.dirname(os.path.abspath(__file__))
        file_path = filedialog.asksaveasfilename(defaultextension='.txt', initialdir=initial_dir)
        if file_path:
            content = self.text_area.get(1.0, tk.END)
            try:
                with open(file_path, 'w') as file:
                    file.write(content)
                    self.file_path = file_path
            except IOError:
                self.text_area.delete(1.0, tk.END)
                self.text_area.insert(tk.END, "Error occurred while saving the file.")
                
    def file_close(self):
        self.file_path = None
        self.text_area.delete(1.0, tk.END)


def main():
    app = PromptEngineerApp('prompt_engineer/utils/config.ini')
    app.mainloop()


if __name__ == '__main__':
    main()