Shadow Agency Code: Difference between revisions
Jump to navigation
Jump to search
m →main.py |
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: | <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:// | 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
Shadow Agency ∞
Theory of a Personal KOS ☀
Structured-Key DataShadow ☀
Shadow Agency Code ☀
AI Agency Workflow Schemes ☀
The Cognitive Mesh ☀
Interlocution Protocol
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()