Shadow Agency Code: Difference between revisions
Jump to navigation
Jump to search
m →main.py |
m →main.py |
||
| Line 4: | Line 4: | ||
==main.py== | ==main.py== | ||
©[[User:XenoEngineer|XenoEngineer]] 17:34, 12 May 2024 (UTC) | ©[[User:XenoEngineer|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. | |||
<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:40px 40px; max-width:760px; margin:40px; "> | ||
Revision as of 17:45, 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 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/Prompt_Engineer"
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):
file_path = filedialog.askopenfilename()
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):
file_path = filedialog.asksaveasfilename(defaultextension='.txt')
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()