2015-03-31 67 views
1

我是Tkinter的新手。我試圖摧毀Toplevel窗口,它完全被破壞,但之後沒有任何東西在運行。光標在python shell中一直閃爍,因爲它在運行無限循環時發生。摧毀Toplevel窗口不會讓應用程序走出主循環

這裏是我的代碼:

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()窗口。

在運行時,我得到一個打開並顯示消息的窗口。我點擊確定,一切都停止。 '大聲笑'不打印在外殼和功能永遠不會結束(因爲沒有達到return語句),因此'幫助'也不會打印

任何想法爲什麼會發生這種情況?

感謝,

+0

'destroy'不會退出主循環,它只會將頂窗撕下。要退出循環,您需要在單擊該按鈕時使用'root1.quit()'以及'root1.destroy()'。 – Scironic 2015-03-31 08:09:15

回答

2

對於一個對話窗口,而不是創建一個新的mainloop,你應該使用wait_window()。這將等待Toplevel窗口關閉,然後繼續執行以下幾行。

所以,你應該創造一個對話窗口中看到this article on effbot.org

root1.wait_window() 

獲得更多提示更換

root1.mainloop() 
root1.quit() 

+0

謝謝你工作得很好 – 2015-03-31 08:29:19

+0

另外我想知道如何添加超過1個功能的命令按鈕我無法找到網絡上的任何網站。 – 2015-03-31 08:39:01

+0

你不能。如果您希望在單擊按鈕時運行多個函數,則必須定義一個新函數,該函數調用要運行的所有函數並將該命令設置爲該函數。另請參閱[此問題](http://stackoverflow.com/q/11401564/3714930)和[此問題](http://stackoverflow.com/q/13865009/3714930)。 – fhdrsdg 2015-03-31 08:42:21