如何在不关闭窗口的情况下停止mainloop功能

时间:2019-10-27 17:46:53

标签: python debugging tkinter

我想调试程序,并且想通过停止mainloop而不关闭窗口来冻结窗口。

我尝试使用quit()destroy(),但是两者都只是关闭了窗口。 我的部分代码的小例子:

from tkinter import Tk, Canvas
root=Tk()
root.bind('<Space>', lambda e: '<------what to put here')

我可以在不总是关闭窗口的情况下关闭mainloop吗,以便它冻结并可以仔细查看。谢谢

1 个答案:

答案 0 :(得分:0)

quit不会破坏该窗口。但是,如果没有代码来阻止程序在mainloop返回后停止,则可能会导致程序停止。

如果您要冻结的目的只是为了调试目的,则无需停止mainloop。最简单的方法是启动pdb调试器,它会提示您并阻止mainloop处理事件,直到退出pdb。

def pause(event=None):
    import pdb
    pdb.set_trace()

root.bind('<Space>', pause)

当然,您不必在这里使用pdb-任何不返回的函数都可以使用。例如,您可以呼叫inputreadpdb之所以方便,是因为它可以检查变量,运行其他代码或一次单步执行程序。

如果您确实想“关闭mainloop”,请调用quit方法。从字面上看这就是它的作用-它告诉mainloop退出。您有责任在mainloop返回之后添加代码以防止窗口关闭。