Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- #Imoprt Tkinter module
- import tkinter as tk
- #F to set grid and button
- def set_grid():
- for x in range(9):
- for y in range(9):
- cell = tk.Entry(window, width = 2)
- cell.grid(row = x, column = y)
- sudoku[x].append(cell)
- solve_but = tk.Button(window, text = "Solve", command = solve_sudoku)
- solve_but.grid(row = 0, column = 9)
- #F to find empty cell
- def find_empty():
- for x in range(9):
- for y in range(9):
- if sudoku[x][y].get() == "":
- return (x, y)
- return False
- #F to get if num in col
- def num_in_col(y, num):
- for x in range(9):
- if sudoku[x][y].get() == str(num):
- return True
- return False
- #F to get if num in row
- def num_in_row(x, num):
- for y in range(9):
- if sudoku[x][y].get() == str(num):
- return True
- return False
- #F to get if num in box
- def num_in_box(xbox, ybox, num):
- for x in range(3):
- for y in range(3):
- if sudoku[x + xbox][y + ybox].get() == str(num):
- return True
- return False
- #F to validate cell
- def validate_cell(x, y, num):
- return not (num_in_row(x, num)) and not (num_in_col(y, num)) and not (num_in_box(x - (x % 3), y - (y % 3), num))
- #F to solve puzzle
- def solve_sudoku():
- find = find_empty()
- if not find_empty():
- return True
- else:
- x, y = find
- for num in range(1, 10):
- if validate_cell(x, y, num):
- sudoku[x][y].delete(0, "end")
- sudoku[x][y].insert(0, str(num))
- sudoku[x][y].config(fg = "SpringGreen3")
- #==> here goes the delay <==
- if solve_sudoku():
- return True
- sudoku[x][y].delete(0, "end")
- return False
- #----------------- Main -----------------
- if __name__ == "__main__":
- # Set window
- window = tk.Tk()
- # Set sudoku
- sudoku = [[] for _ in range(9)]
- # Set GUIs grid
- set_grid()
- # Keep the app running
- window.mainloop()
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement