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/

相关文章:

Java 图形用户界面 |如何只给 JLabel 顶部边框

python - 将变量传递给 Tkinter 几何方法

python - 当关联的 StringVar 更改时,防止 tkinter Entry 获得焦点

python - 在 AWS Lambda 中解析 SQS 消息触发器 - Python

python - python 中的素数生成器返回多个复合 Material 而不是素数

python - 如何在线程上发送消息?

Java 图形用户界面库

C# 如何在 textBox 中允许换行和空格

python - 当窗口展开或最大化时如何调整可滚动框架的大小?

python - 导入一个简单的 Tensorflow frozen_model.pb 文件并在 C++ 中进行预测