我正在通过为数独求解程序(已经构建)制作 GUI 来学习 Tkinter。
点击一个按钮,解决数独的算法就会运行,有时需要一些时间。
如何在调用函数时更新屏幕上的数独,以便用户可以看到它的运行情况?
我正在使用与数独游戏分开的 gui 脚本,从设计的角度来说,将 gui 和逻辑分开是否正确?
提前致谢
编辑
这是我的代码:
数独
class Sudoku(object):
def __init__(self):
self.__matrix = [[(0, Status.Guess) for x in range(9)] for y in range(9)]
...
def solveSudoku(self):
...
图形界面.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()
最佳答案
我猜你一定是在使用一些解决数独的循环。如果这是真的:
定义按钮功能/命令的地方, 将以下代码放在解决数独的主循环的开头(假设 root 是您的 tkinter 窗口):
root.update()
这样的方法不是完全线程安全的,但应该可以解决像您这样的一般情况的问题。
保持 GUI 和逻辑分离是最佳实践。
关于Python Tkinter - 在运行时更新,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/41499259/