Ich lerne Tkinter durch die Erstellung einer GUI für ein Sudoku-Solver-Programm (das war bereits gebaut).Python Tkinter - Update während funtion in laufenden
Auf Knopfdruck läuft der Algorithmus, der das Sudoku löst und manchmal braucht es etwas Zeit.
Wie kann ich das Sudoku auf dem Bildschirm aktualisieren, wenn die Funktion aufgerufen wird, damit Benutzer sehen können, wie es läuft?
Ich arbeite mit einem GUI-Skript getrennt von der Sudoku, ist es richtig, in Design-Begriffe, die GUI und die Logik getrennt zu haben?
Vielen Dank im Voraus
EDIT
Dies ist mein Code:
Sudoku.py
class Sudoku(object):
def __init__(self):
self.__matrix = [[(0, Status.Guess) for x in range(9)] for y in range(9)]
...
def solveSudoku(self):
...
GUI.py
class App:
def __init__(self, master, su):
self.__sudoku__ = su
self.__root__ = master
self.__entries__ = {}
fsudoku = Frame(master)
fsudoku.grid(row=0)
self.displaysudoku(fsudoku) """grid of entrys"""
tButton = Button(master,text="Solve", command=self.SolveAndDisplay)
...
def refreshSudokuGrid(self):
"""USED AFTER SOLVING A SUDOKU"""
for i in range(1,10):
for j in range(1,10):
val = self.__sudoku__.value(i,j)
self.__entries__[i * 10 +j].delete(0, END)
if (val!= 0):
self.__entries__[i * 10 + j].insert(0, val)
def SolveAndDisplay(self):
self.scanSudoku()
self.__sudoku__.solveSudoku()
self.refreshSudokuGrid()
...
root = Tk()
su = Sudoku()
s = App(root, su)
root.mainloop()
"ist es richtig, in Design-Begriffe, die GUI und die Logik getrennt zu haben?" Es ist nicht nur richtig, es ist auch die beste Vorgehensweise. Du machst das Richtige, vor allem aus pythonischer Sicht, die dazu tendiert, alles modular zu machen. –
Ich stimme zu, dass es eine sehr gute Idee ist, den GUI-Code und die Sudoku-Lösungslogik getrennt zu halten. Ich schlage jedoch vor, dass Sie nach einem effizienteren Sudoku-Solver suchen. Der, den du benutzt, sieht aus wie eine sehr primitive Brute-Force-Suche, weshalb er so langsam sein kann. Bitte sieh [diese Seite] (http://www.cs.mcgill.ca/~aassaf9/python/algorithm_x.html) von Ali Assaf, was ein kurzer Artikel über Exact Cover-Probleme ist und wie Knuths Algorithmus X verwendet werden kann Löse sie. Diese Seite enthält einen Link zu einem von Ali geschriebenen Python 3 Sudoku Solver, der die Lösung in weniger als einer Sekunde finden wird. –