我見過的每一個tkinter教程都聲稱,必須調用tkinter.mainloop
來繪製要繪製的窗口和要處理的事件,並且即使在hello world程序中它們也總是調用此函數。但是,當我在交互式shell中嘗試這些時,無需調用mainloop即可正確繪製窗口。在tkinter中嵌入matplotlib圖形的This example會生成一個相對複雜的應用程序,並帶有用於在tkinter窗口中平移,縮放和調整圖形大小的按鈕,並且,如果您移除對mainloop的調用並在交互式shell中運行代碼,當然,如果我在交互式shell外運行腳本(在主循環被移除的情況下),程序結束得太快以至於看不到會發生什麼,但是如果我添加一個調用input
來保持程序打開一切正常(我正在運行python 3.2.2在linux上)。什麼時候需要在Tkinter應用程序中調用mainloop?
那麼,mainloop究竟做了什麼,以及何時需要調用它?
編輯: 爲了澄清,如果我打通GNOME終端輸入而不必調用主循環
$python3
>>> import tkinter
>>> root = tkinter.Tk()
一個窗口立即出現,和更復雜的Tkinter功能似乎工作以及(例如,向窗口添加按鈕)。在IDLE中,調用mainloop是必要的。我的理解是,除非主循環被調用,否則不應該繪製任何事件,也不應處理任何事件。
對不起,我應該提到:我只是用標準Python殼(未IDLE)在GNOME終端(其顯然寫入C)。就我所知,除了我自己的代碼之外,沒有什麼東西可以做任何影響tkinter的東西。 – James 2011-12-30 21:38:45
我剛剛在IDLE中嘗試過同樣的事情,而且我沒有得到相同的行爲 - 直到我調用mainloop時纔會出現窗口。 – James 2011-12-30 21:46:38