Python Tkinter - 在运行时更新

标签 python user-interface tkinter

我正在通过为数独求解程序(已经构建)制作 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/

相关文章:

python - plumbum.commands.processes.ProcessExecutionError : for commands which return null

python - Homebrew 升级后的 Jupyter Notebook ModuleError

android:即时反射(reflect) UI 语言更改,无需重新加载/重新启动应用程序

ios - UITextField 中的静态字符前缀

python - 使用 matshow 在行和/或列之间插入间隙

python - 如何使用 matplotlib 在 y 轴中包含负值?

qt - 在 Qt 中异步运行控制台输出和 GUI

python - 无法在内部使用几何管理器包

python - 使用 Tkinter 显示图像并随时间循环

python - 如何为 tkinter 窗口添加边距