我通过为数独求解器程序制作一个GUI(这是一个arleady构建的)来学习Tkinter。
单击按钮,解决数独运算的算法运行,有时需要一些时间。
如何在调用该函数时更新屏幕上的数独,以便用户可以看到它的运行方式?
我正在使用与数独游戏分开的gui脚本,在设计方面,将gui和逻辑分开是否正确?
提前感谢
修改
这是我的代码:
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()
答案 0 :(得分:1)
我猜你必须使用一些解决数独的循环。如果这是真的:
定义按钮的功能/命令的位置, 将以下代码放在解决数独的主循环的开头(假设root是你的tkinter窗口):
root.update()
因为这样的方法不是完全线程安全的,但是应该解决像你这样的一般情况的问题。
保持GUI和逻辑分离是最佳实践。