私はTkinterを学んでいます。Python Tkinter - 実行中に更新中
ボタンをクリックすると、sudokuを解決するアルゴリズムが実行され、時には時間がかかることがあります。
関数が呼び出されたときに画面上のスクロールを更新すると、ユーザーはその実行方法を確認できますか?
私はsudokuとは別のguiスクリプトで作業していますが、設計上、guiとロジックを分離するのは正しいですか?事前に
感謝
EDIT
これは私のコードです:
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()
"設計上、guiとロジックを分離するのは正しいですか?"それだけでなく、ベストプラクティスです。あなたは、特にPythonicの観点から、すべてをモジュール化する傾向がある、正しいことをやっています。 –
私は、GUIコードと数独解決ロジックを分離しておくことが大変良い考えであることに同意します。しかし、より効率的な数独ソルバーを探すことをお勧めします。あなたが使用しているものは非常に原始的なブルートフォース検索のように見えます。 Ali Assafの[このページ](http://www.cs.mcgill.ca/~aassaf9/python/algorithm_x.html)を参照してください。これはExact Coverの問題とKnuthのアルゴリズムXをどのように使用できるかについての短い記事ですそれらを解決する。このページには、Aliによって書かれたPython 3 Sudokuソルバーへのリンクが含まれています。 –