-
Notifications
You must be signed in to change notification settings - Fork 0
/
Copy pathapp.py
125 lines (88 loc) · 4.31 KB
/
app.py
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
from tkinter import *
import sudoku as susuSolver
#Canvas Variables
HEIGHT = 700
WIDTH = 1600
#Main Window
window = Tk()
window.title("Sudoku Solver")
window.configure(bg="black")
#Canvas ---------------------------------------------------------------------------------------------------
canvas = Canvas(window, height=HEIGHT, width=WIDTH, bg='#32384f')
canvas.pack()
#Main Frame -----------------------------------------------------------------------------------------------
mainFrame = Frame(window, bg='black')
mainFrame.place(relx = 0.05, rely = 0.1, relwidth = 0.9, relheight = 0.8)
#Greet ----------------------------------------------------------------------------------------------------
greetFrame = Frame(mainFrame)
greetFrame.place(relx = 0, rely = 0, relwidth = 1, relheight = 0.05)
greet = Label(greetFrame, text='Hello there! Please enter your Sudoku configuration')
greet.place(relheight = 1, relwidth = 1)
#Sudoku Main Frame ---------------------------------------------------------------------------------------
sudokuMainFrame = Frame(mainFrame, bg='black')
sudokuMainFrame.place(rely = 0.05, relheight = 1, relwidth = 1)
#SudokuInputFrame ----------------------------------------------------------------------------------------
sudokuInputFrame = Frame(sudokuMainFrame, bg='#15161f')
sudokuInputFrame.place(relx = 0, relwidth = 0.5, relheight = 1)
sudokuInputRect = Frame(sudokuInputFrame, bg='black')
sudokuInputRect.place(relx = 0.1, relwidth = 0.8, rely = 0.1, relheight = 0.8)
sudokuInputEntries = [[0 for i in range(9)] for j in range(9)]
for i in range(9):
for j in range(9):
sudokuInputEntries[i][j] = Entry(sudokuInputRect, bg='#a8a8a8', justify = 'center', borderwidth = 0.5, relief = 'groove')
sudokuInputEntries[i][j].place(relx = (j/9), rely = (i/9), relheight = 1/9, relwidth = 1/9)
sudokuInputMarkersI = [None for i in range(3)]
for i in range(3):
sudokuInputMarkersI[i] = Frame(sudokuInputRect, bg = 'black')
sudokuInputMarkersI[i].place(relx = (i+1)/3, relheight = 1, relwidth = 0.01)
sudokuInputMarkersJ = [None for i in range(3)]
for j in range(3):
sudokuInputMarkersJ[j] = Frame(sudokuInputRect, bg = 'black')
sudokuInputMarkersJ[j].place(rely = (j+1)/3, relwidth = 1, relheight = 0.01)
#SudokuOutputFrame ---------------------------------------------------------------------------------------
sudokuOutputFrame = Frame(sudokuMainFrame, bg='#42444f')
sudokuOutputFrame.place(relx = 0.5, relwidth = 0.5, relheight = 1)
sudokuOutputRect = Frame(sudokuOutputFrame, bg = 'black')
sudokuOutputRect.place(relx = 0.1, relwidth = 0.8, rely = 0.1, relheight = 0.8)
sudokuOutputSquare = [[None for i in range (9)] for j in range(9)]
k = 0
for i in range(9):
for j in range(9):
sudokuOutputSquare[i][j] = Label(sudokuOutputRect, text=0, bg='white', borderwidth = 2, relief = 'groove')
sudokuOutputSquare[i][j].place(relx = (j/9), rely = (i/9), relheight = 1/9, relwidth = 1/9)
sudokuOutputMarkersI = [None for i in range(3)]
for i in range(3):
sudokuOutputMarkersI[i] = Frame(sudokuOutputRect, bg = 'black')
sudokuOutputMarkersI[i].place(relx = (i+1)/3, relheight = 1, relwidth = 0.01)
sudokuOutputMarkersJ = [None for i in range(3)]
for j in range(3):
sudokuOutputMarkersJ[j] = Frame(sudokuOutputRect, bg = 'black')
sudokuOutputMarkersJ[j].place(rely = (j+1)/3, relwidth = 1, relheight = 0.01)
#METHODS ------------------------------------------------------------------------------------------------
def getEntry2D():
inputConfig = [[None for i in range (9)] for j in range(9)]
for i in range(len(sudokuInputEntries)):
for j in range(len(sudokuInputEntries[i])):
if (sudokuInputEntries[i][j].get() == None or sudokuInputEntries[i][j].get() == ''):
inputConfig[i][j] = 0
else:
inputConfig[i][j] = sudokuInputEntries[i][j].get()
#print(inputConfig)
return(inputConfig)
def parseInputToString(entry):
inputConfig = ''
for i in range(len(entry)):
for j in range(len(entry[i])):
inputConfig = inputConfig + str(entry[i][j])
return(inputConfig)
def solveSudoku(event):
configuration = parseInputToString(getEntry2D())
S = susuSolver.Solver(configuration, '')
solvedConfig = S.getSolvedConfig()
k = 0
for i in range(9):
for j in range(9):
sudokuOutputSquare[i][j]['text'] = solvedConfig[k]
k = k + 1
window.bind('<Return>', solveSudoku)
window.mainloop()