簡體   English   中英

銷毀“頂級”窗口不會使應用程序脫離主循環

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

我是Tkinter的新手。 我正在嘗試銷毀“頂層”窗口,但它被完美銷毀了,但是此后什么也沒有運行。 游標在運行無限循環時不斷在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”不會在外殼中打印,並且函數永遠不會結束(因為未到達return語句),因此也不會打印“ Help”

知道為什么會這樣嗎?

謝謝,

對於對話框窗口,而不是創建新的mainloop ,應使用wait_window() 這將等待直到“頂級”窗口關閉,然后繼續執行以下各行。

所以你應該更換

root1.mainloop()
root1.quit()

root1.wait_window()

有關創建對話框窗口的更多提示,請參閱effbot.org上的本文

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM