diff --git a/GUI_byBuni.py b/GUI_byBuni.py index 8ee796f41c2aed1e9f1e3467387939011b477148..944a692c18c04aa2b89948ff95f0d4e01e8add3b 100644 --- a/GUI_byBuni.py +++ b/GUI_byBuni.py @@ -43,7 +43,7 @@ def create_tooltip(widget, text): return tooltip class DrawingApp: - def __init__(self, root): + def __init__(self, root): # initialize the drawingapp to set up all the styles self.root = root self.root.title("Graphical User Interface for REPL Interpreter based on ExplainDT") self.canvas_size = 560 @@ -141,7 +141,7 @@ class DrawingApp: # Initialize the 28x28DrawingPanel2VectorConverter tab content self.initialize_drawing_tab() - def initialize_drawing_tab(self): + def initialize_drawing_tab(self): # init canvas self.canvas = tk.Canvas(self.drawing_frame, width=self.canvas_size, height=self.canvas_size, bg='black') self.canvas.grid(row=0, column=0, sticky="nsew") @@ -157,22 +157,22 @@ class DrawingApp: self.reset_button = ttk.Button(button_frame, text="Reset", command=self.reset_canvas, style="Large.TButton") self.reset_button.grid(row=0, column=1, padx=5) - def draw(self, event): + def draw(self, event): # draw on drawing panel using mouse x, y = event.x, event.y x1 = (x // self.pixel_size) * self.pixel_size y1 = (y // self.pixel_size) * self.pixel_size self.canvas.create_rectangle(x1, y1, x1 + self.pixel_size, y1 + self.pixel_size, fill="white", outline="white") self.update_vector(x1, y1) - def update_vector(self, x, y): + def update_vector(self, x, y): # update vector array based on drawn pixels index = (y // self.pixel_size) * self.grid_size + (x // self.pixel_size) self.vector[index] = 1 - def generate_vector(self): + def generate_vector(self): # convert drawn image to vector string vector_str = f"[{','.join(map(str, self.vector))}]" self.show_vector_window(vector_str) - def show_vector_window(self, vector_str): + def show_vector_window(self, vector_str): # display vector which was drawn in new window vector_window = tk.Toplevel(self.root) vector_window.title("Generated Vector") @@ -182,23 +182,23 @@ class DrawingApp: copy_button = ttk.Button(vector_window, text="Copy to Clipboard", command=lambda: self.copy_to_clipboard(vector_str), style="Large.TButton") copy_button.pack(pady=5) - def copy_to_clipboard(self, vector_str): + def copy_to_clipboard(self, vector_str): # copy vector to clipoard self.root.clipboard_clear() self.root.clipboard_append(vector_str) messagebox.showinfo("Copied", "The vector has been copied to the clipboard.") - def reset_canvas(self): + def reset_canvas(self): # reset drawing panel (erase everything) self.canvas.delete("all") self.vector = [0] * (self.grid_size * self.grid_size) - def select_solver(self): + def select_solver(self): # select sat solver self.solver_path = filedialog.askopenfilename(title="Select Solver") if self.solver_path: self.solver_button.config(bg="green", activebackground="green", text="Solver Selected") self.update_tooltip(self.solver_button, self.solver_tooltip, self.solver_path) messagebox.showinfo("Solver Selected", f"Solver path set to: {self.solver_path}") - def select_model(self): + def select_model(self): # select model (in json format) self.model_path = filedialog.askopenfilename(title="Select Model") if self.model_path: self.model_button.config(bg="green", activebackground="green", text="Model Selected") @@ -210,7 +210,7 @@ class DrawingApp: button.unbind('<Leave>') tooltip = create_tooltip(button, text) - def evaluate_query(self): + def evaluate_query(self): # query evaluation using impl. of arenas et al. query = self.query_entry.get("1.0", tk.END).strip() if not self.solver_path or not self.model_path: messagebox.showwarning("Paths Missing", "Please select both solver and model paths.") @@ -237,11 +237,11 @@ class DrawingApp: result_label = tk.Label(result_window, text=cleaned_output, wraplength=500, font=("Helvetica", 12)) result_label.pack(pady=10, padx=10) - def remove_ansi_codes(self, text): + def remove_ansi_codes(self, text): # remove escape code ansi_escape = re.compile(r'\x1B[@-_][0-?]*[ -/]*[@-~]') return ansi_escape.sub('', text) - def on_tab_change(self, event): + def on_tab_change(self, event): # tab change for plugin window selected_tab = event.widget.tab('current')['text'] if selected_tab == '28x28DrawingPanel2VectorConverter': if not hasattr(self, 'drawing_initialized'): @@ -258,7 +258,7 @@ class DrawingApp: plugin3_label = ttk.Label(self.plugin3_frame, text="Coming soon...", style="Large.TLabel") plugin3_label.pack(expand=True) - def initialize_query_builder_tab(self): + def initialize_query_builder_tab(self): # init query builder tab query_builder_frame = ttk.Frame(self.query_builder_frame) query_builder_frame.pack(fill=tk.BOTH, expand=True) @@ -299,16 +299,16 @@ class DrawingApp: def insert_grammar_element(self, element): self.query_text.insert(tk.END, f" {element} ") - def copy_query(self): + def copy_query(self): # copy query which was generated using query builder plugin query = self.query_text.get("1.0", tk.END).strip() self.root.clipboard_clear() self.root.clipboard_append(query) messagebox.showinfo("Copied", "The query has been copied to the clipboard.") - def clear_query(self): + def clear_query(self): # reset query bulder self.query_text.delete("1.0", tk.END) - def show_query_history(self): + def show_query_history(self): # evaluated query history history_window = tk.Toplevel(self.root) history_window.title("Query History")