2014-02-22 64 views
2

我剛剛開始學習tkinter,我在這裏錯過了一些基本的東西。當我試圖做什麼,但創建一個空白窗口,我得到混合結果。下面的代碼:.pyw tk程序立即關閉?

from tkinter import * 
from tkinter import ttk 

root = Tk() 

而發生的事情是,如果我在Python運行殼它完美的作品(如只需按在IDLE編輯器F5)和一點點空白的窗口彈出並保持打開狀態,直到我關閉它。

但是,如果我只是雙擊.pyw文件,什麼都沒有發生。如果我將它另存爲.py,也是如此。

如果我將它保存爲.py input()添加到最後,然後彈出小空白窗口並保持打開狀態。將它添加到.pyw中沒有任何作用;仍然沒有發生。因爲.pyw隱藏了控制檯,所以這是有部分意義的。

但我在這裏做錯了什麼?我需要做些什麼才能製作一個.pyw文件,它只是顯示一個空白窗口並且不顯示控制檯?

回答

7

問題不是文件類型,因爲您會很高興知道。保存爲.pyw只是表示當文件運行時控制檯不會顯示(不附加任何字符串,代碼運行完全相同) - 並且無論代碼如何,都不會有例外。

你需要做的是將它添加到你的代碼的結束(這是必要的所有tkinter程序):

root.mainloop() # this will launch the window 

窗口將不會出現,直到我們進入了tkinter事件循環程序將保持在事件循環中,直到關閉窗口。

事件循環並不只處理來自用戶的事件(例如鼠標點擊和鍵按壓),或窗口系統(例如,重繪事件和窗口配置消息),它也處理由tkinter本身排隊的操作。這些操作包括幾何管理(通過.pack()方法排隊)並顯示更新。這也意味着在輸入mainloop()之前應用程序窗口不會出現。

我認爲你不需要在IDLE中調用mainloop()的原因是因爲IDLE本身是一個tkinter程序,它已經有一個事件循環。因此,您在shell中輸入的tkinter代碼可能會被綁定到IDLE的事件循環。

+0

真正完整的答案,最後一段成功了。 – Aerovistae