有没有办法让这个 Python Tkinter 函数显示具有某种延迟效果的数字?

Is there a way to make this Python Tkinter function display numbers with some kind of delay effect?

我正在开发一个简单的 Python GUI 应用程序来使用 Tkinter 解决数独问题。我目前的问题是,我显然已经尝试了所有可能的方法来在回溯算法找到求解数字时对求解数字的显示添加一点延迟,以便在网格上获得视觉效果(就像 here ).

代码如下:

#F to solve puzzle
def solve_sudoku():
    find = find_empty()
    if not find_empty():
        return True
    else:
        x, y = find
    for num in range(1, 10):
        if validate_cell(x, y, num):
            sudoku[x][y].delete(0, "end")
            sudoku[x][y].insert(0, str(num))
            sudoku[x][y].config(fg = "SpringGreen3")
            #===> here goes the delay <===
            if solve_sudoku():
                return True
            sudoku[x][y].delete(0, "end")   
    return False

现在,.sleep()当然不起作用,因为它会影响整个 GUI。我注意到唯一似乎以某种方式起作用的是 messagebox 小部件,但这不是处理它的正确方法。我也尝试过其他小部件,例如隐藏一些微标签,但无济于事。什么可能有用?

EDIT1:也尝试了 .after() 方法,但无法从中得到任何好处。

EDIT2:sudoku[][] 是条目对象列表的列表。

EDIT3:here 您可以快速找到该程序的一个非常简单的可重现示例。

您只需在休眠时调用 window 上的函数 update_idletasks 即可更新 GUI 中的小部件。此外,您还必须将 window 声明为全局变量,因为它不在函数中。

import time
def solve_sudoku():
    global window # Line added for wait
    find = find_empty()
    if not find_empty():
        return True
    else:
        x, y = find
    for num in range(1, 10):
        if validate_cell(x, y, num):
            sudoku[x][y].delete(0, "end")
            sudoku[x][y].insert(0, str(num))
            sudoku[x][y].config(fg = "SpringGreen3")
            time.sleep(0.01) # Line Added for wait
            window.update_idletasks() # Line Added for wait
            if solve_sudoku():
                return True
            sudoku[x][y].delete(0, "end")   
    return False