调用Tkinter root.quit()会导致内核和窗口停止响应

时间:2017-06-05 12:13:41

标签: python tkinter window root exit

import Tkinter as Tk

root = Tk.Tk()

def generate():
    root.quit()

label1 = Tk.Label(root, text="Map Width:")
label2 = Tk.Label(root, text="Map Height:")
label3 = Tk.Label(root, text="Lake Size:")
e1 = Tk.Entry(root)
e2 = Tk.Entry(root)
e3 = Tk.Entry(root)
button1 = Tk.Button(root, text="Generate", command=generate)
label1.grid(row=0, column=0)
label2.grid(row=1, column=0)
label3.grid(row=2, column=0)
e1.grid(row=0, column=1)
e2.grid(row=1, column=1)
e3.grid(row=2, column=1)
button1.grid(row=3, column=1)

root.mainloop()

这是一个较大项目的片段,为了简单起见,删除了generate()的剩余功能。使用上面的代码,成功创建了一个窗口,其中包含三个标签,三个相应的输入字段和一个按钮。生成按钮用于调用函数generate(),而函数root.quit()依次根据其他代码创建地图对象,然后调用It seems the kernel died unexpectedly. Use 'Restart kernel' to continue using this console.

然而,当按下按钮时,窗口停止响应并且python内核重复打印消息:

$("#playlist li").on("click", function(){
    $("#videoarea").attr({
    "src": $(this).data("movieurl"),
    "autoplay": true,
    "type": "video/mp4"
  });
});

我确定这是一个小错误,但如果有人能告诉我哪里出错了,我会非常感激。

1 个答案:

答案 0 :(得分:0)

使用root.destroy()代替root.quit()

root.quit()根据我的理解,当你想要运行主循环后有其他代码时,可以更好地使用它。

"""Quit the Tcl interpreter. All widgets will be destroyed."""

root.destroy()会破坏主循环中的所有内容。并且应该用于退出程序。

这是tkinter库中方法的引用。

"""Destroy this and all descendants widgets. This will
        end the application of this Tcl interpreter."""