销毁 Toplevel window 不会让应用程序跳出主循环

Destroying Toplevel window doesn't let the application come out of the main loop

我是 Tkinter 的新手。我正在尝试摧毁 Toplevel window,它被完美摧毁,但在那之后什么都没有 运行。光标一直在 python shell 中闪烁,因为它发生在 运行 无限循环中。

这是我的代码:

def error_msg(msg) :
    root1 = Tk.Toplevel()
    root1.attributes("-topmost", True)
    root1.title("Error")
    w1 = 230
    h1 = 100
    ws1 = root1.winfo_screenwidth()
    hs1 = root1.winfo_screenheight()
    x1 = (ws1/2) - (w1/2)
    y1 = (hs1/2) - (h1/2)
    root1.geometry('%dx%d+%d+%d' % (w1, h1, x1, y1))
    can1 = Tk.Canvas(root1,width = 230,height=100)
    can1.pack()
    im1 = Image.open("img.png")
    tkimage1 = ImageTk.PhotoImage(im1)
    Canvas_Image1 = can1.create_image(0,0, image=tkimage, anchor="nw")

    canvas_id1 = can1.create_text(15, 10, anchor="nw")
    can1.itemconfig(canvas_id1, text=msg)
    Tk.Button(root1, text='OK', command =root1.destroy).place(x=110,y=70)
    root1.mainloop()
    root1.quit()
    print 'lol'
    return None

error_msg("This is an error")
    print 'Help'

在此之前,我已经打开了 Tk() window,所以我正在使用 Toplevel() window.

在 运行 我收到一个 window 打开并显示消息。我点击确定,一切都停止了。 'lol' 不会在 shell 中打印并且函数永远不会结束(因为未达到 return 语句),因此 'Help' 也不会打印

知道为什么会这样吗??

谢谢,

对于对话框 window,您应该使用 wait_window(),而不是创建新的 mainloop。这会等到 Toplevel window 关闭,然后继续执行以下行。

所以你应该更换

root1.mainloop()
root1.quit()

root1.wait_window()

有关创建对话框的更多提示 window 请参阅 this article on effbot.org