【发布时间】:2015-06-04 11:32:39
【问题描述】:
我是 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'
知道为什么会这样吗??
谢谢,
【问题讨论】:
-
destroy不会退出主循环,它只会拆除顶部窗口。要退出循环,您需要在单击按钮时使用root1.quit()和root1.destroy()。
标签: python tkinter tkinter-canvas