销毁Toplevel窗口不会让应用程序退出主循环

时间:2015-03-31 07:51:10

标签: python tkinter tkinter-canvas

我是Tkinter的新手。我试图摧毁Toplevel窗口,它被彻底摧毁,但之后没有任何东西在运行。在运行无限循环时,光标在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()窗口,因此我使用的是Toplevel()窗口。

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

任何想法为什么会发生这种情况?

谢谢,

1 个答案:

答案 0 :(得分:2)

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

所以你应该替换

root1.mainloop()
root1.quit()

root1.wait_window()

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