Python Tkinter - 在运行时更新功能

时间:2017-01-06 05:04:53

标签: python user-interface tkinter

我通过为数独求解器程序制作一个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()

1 个答案:

答案 0 :(得分:1)

我猜你必须使用一些解决数独的循环。如果这是真的

定义按钮的功能/命令的位置, 将以下代码放在解决数独的主循环的开头(假设root是你的tkinter窗口):

root.update() 

因为这样的方法不是完全线程安全的,但是应该解决像你这样的一般情况的问题。

保持GUI和逻辑分离是最佳实践。