Skip to content
Snippets Groups Projects
Commit 5c306ab4 authored by Bünyamin Dincer's avatar Bünyamin Dincer
Browse files

Update GUI_byBuni.py

parent e1bd4545
No related branches found
No related tags found
No related merge requests found
...@@ -43,7 +43,7 @@ def create_tooltip(widget, text): ...@@ -43,7 +43,7 @@ def create_tooltip(widget, text):
return tooltip return tooltip
class DrawingApp: class DrawingApp:
def __init__(self, root): def __init__(self, root): # initialize the drawingapp to set up all the styles
self.root = root self.root = root
self.root.title("Graphical User Interface for REPL Interpreter based on ExplainDT") self.root.title("Graphical User Interface for REPL Interpreter based on ExplainDT")
self.canvas_size = 560 self.canvas_size = 560
...@@ -141,7 +141,7 @@ class DrawingApp: ...@@ -141,7 +141,7 @@ class DrawingApp:
# Initialize the 28x28DrawingPanel2VectorConverter tab content # Initialize the 28x28DrawingPanel2VectorConverter tab content
self.initialize_drawing_tab() 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 = tk.Canvas(self.drawing_frame, width=self.canvas_size, height=self.canvas_size, bg='black')
self.canvas.grid(row=0, column=0, sticky="nsew") self.canvas.grid(row=0, column=0, sticky="nsew")
...@@ -157,22 +157,22 @@ class DrawingApp: ...@@ -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 = ttk.Button(button_frame, text="Reset", command=self.reset_canvas, style="Large.TButton")
self.reset_button.grid(row=0, column=1, padx=5) 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 x, y = event.x, event.y
x1 = (x // self.pixel_size) * self.pixel_size x1 = (x // self.pixel_size) * self.pixel_size
y1 = (y // 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.canvas.create_rectangle(x1, y1, x1 + self.pixel_size, y1 + self.pixel_size, fill="white", outline="white")
self.update_vector(x1, y1) 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) index = (y // self.pixel_size) * self.grid_size + (x // self.pixel_size)
self.vector[index] = 1 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))}]" vector_str = f"[{','.join(map(str, self.vector))}]"
self.show_vector_window(vector_str) 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 = tk.Toplevel(self.root)
vector_window.title("Generated Vector") vector_window.title("Generated Vector")
...@@ -182,23 +182,23 @@ class DrawingApp: ...@@ -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 = ttk.Button(vector_window, text="Copy to Clipboard", command=lambda: self.copy_to_clipboard(vector_str), style="Large.TButton")
copy_button.pack(pady=5) 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_clear()
self.root.clipboard_append(vector_str) self.root.clipboard_append(vector_str)
messagebox.showinfo("Copied", "The vector has been copied to the clipboard.") 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.canvas.delete("all")
self.vector = [0] * (self.grid_size * self.grid_size) 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") self.solver_path = filedialog.askopenfilename(title="Select Solver")
if self.solver_path: if self.solver_path:
self.solver_button.config(bg="green", activebackground="green", text="Solver Selected") self.solver_button.config(bg="green", activebackground="green", text="Solver Selected")
self.update_tooltip(self.solver_button, self.solver_tooltip, self.solver_path) self.update_tooltip(self.solver_button, self.solver_tooltip, self.solver_path)
messagebox.showinfo("Solver Selected", f"Solver path set to: {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") self.model_path = filedialog.askopenfilename(title="Select Model")
if self.model_path: if self.model_path:
self.model_button.config(bg="green", activebackground="green", text="Model Selected") self.model_button.config(bg="green", activebackground="green", text="Model Selected")
...@@ -210,7 +210,7 @@ class DrawingApp: ...@@ -210,7 +210,7 @@ class DrawingApp:
button.unbind('<Leave>') button.unbind('<Leave>')
tooltip = create_tooltip(button, text) 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() query = self.query_entry.get("1.0", tk.END).strip()
if not self.solver_path or not self.model_path: if not self.solver_path or not self.model_path:
messagebox.showwarning("Paths Missing", "Please select both solver and model paths.") messagebox.showwarning("Paths Missing", "Please select both solver and model paths.")
...@@ -237,11 +237,11 @@ class DrawingApp: ...@@ -237,11 +237,11 @@ class DrawingApp:
result_label = tk.Label(result_window, text=cleaned_output, wraplength=500, font=("Helvetica", 12)) result_label = tk.Label(result_window, text=cleaned_output, wraplength=500, font=("Helvetica", 12))
result_label.pack(pady=10, padx=10) 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-?]*[ -/]*[@-~]') ansi_escape = re.compile(r'\x1B[@-_][0-?]*[ -/]*[@-~]')
return ansi_escape.sub('', text) 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'] selected_tab = event.widget.tab('current')['text']
if selected_tab == '28x28DrawingPanel2VectorConverter': if selected_tab == '28x28DrawingPanel2VectorConverter':
if not hasattr(self, 'drawing_initialized'): if not hasattr(self, 'drawing_initialized'):
...@@ -258,7 +258,7 @@ class DrawingApp: ...@@ -258,7 +258,7 @@ class DrawingApp:
plugin3_label = ttk.Label(self.plugin3_frame, text="Coming soon...", style="Large.TLabel") plugin3_label = ttk.Label(self.plugin3_frame, text="Coming soon...", style="Large.TLabel")
plugin3_label.pack(expand=True) 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 = ttk.Frame(self.query_builder_frame)
query_builder_frame.pack(fill=tk.BOTH, expand=True) query_builder_frame.pack(fill=tk.BOTH, expand=True)
...@@ -299,16 +299,16 @@ class DrawingApp: ...@@ -299,16 +299,16 @@ class DrawingApp:
def insert_grammar_element(self, element): def insert_grammar_element(self, element):
self.query_text.insert(tk.END, f" {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() query = self.query_text.get("1.0", tk.END).strip()
self.root.clipboard_clear() self.root.clipboard_clear()
self.root.clipboard_append(query) self.root.clipboard_append(query)
messagebox.showinfo("Copied", "The query has been copied to the clipboard.") 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) 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 = tk.Toplevel(self.root)
history_window.title("Query History") history_window.title("Query History")
......
0% Loading or .
You are about to add 0 people to the discussion. Proceed with caution.
Please register or to comment