Skip to content
GitLab
Explore
Sign in
Primary navigation
Search or go to…
Project
E
ExplainDT Advanced
Manage
Activity
Members
Labels
Plan
Issues
Issue boards
Milestones
Wiki
Code
Merge requests
Repository
Branches
Commits
Tags
Repository graph
Compare revisions
Snippets
Build
Pipelines
Jobs
Pipeline schedules
Artifacts
Deploy
Releases
Package registry
Container registry
Model registry
Operate
Environments
Terraform modules
Monitor
Incidents
Service Desk
Analyze
Value stream analytics
Contributor analytics
CI/CD analytics
Repository analytics
Model experiments
Help
Help
Support
GitLab documentation
Compare GitLab plans
GitLab community forum
Contribute to GitLab
Provide feedback
Terms and privacy
Keyboard shortcuts
?
Snippets
Groups
Projects
Show more breadcrumbs
Bünyamin Dincer
ExplainDT Advanced
Commits
5c306ab4
Commit
5c306ab4
authored
11 months ago
by
Bünyamin Dincer
Browse files
Options
Downloads
Patches
Plain Diff
Update GUI_byBuni.py
parent
e1bd4545
No related branches found
No related tags found
No related merge requests found
Changes
1
Show whitespace changes
Inline
Side-by-side
Showing
1 changed file
GUI_byBuni.py
+17
-17
17 additions, 17 deletions
GUI_byBuni.py
with
17 additions
and
17 deletions
GUI_byBuni.py
+
17
−
17
View file @
5c306ab4
...
@@ -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
"
)
...
...
This diff is collapsed.
Click to expand it.
Preview
0%
Loading
Try again
or
attach a new file
.
Cancel
You are about to add
0
people
to the discussion. Proceed with caution.
Finish editing this message first!
Save comment
Cancel
Please
register
or
sign in
to comment