2014-07-14 29 views
2

下面的代碼在IDLE內運行正常,但除此之外我得到「NameError:全局名稱'messagebox'未定義」。但是,如果我明確說明from tkinter import messagebox,它從任何地方運行良好。Python tkinter 8.5導入消息框

from tkinter import * 
from tkinter import ttk 

root = Tk() 
mainFrame = ttk.Frame(root) 
messagebox.showinfo("My title", "My message", icon="warning", parent=mainFrame) 

爲什麼IDLE不需要顯式導入語句,但需要其他地方?

+1

IDLE是tkinter程序,因此它有自己的導入和root用戶。在IDLE中用tkinter編程是一個壞主意。爲了避免在控制檯中出現行爲更好的情況。 – Trimax

回答

7

在MessageBox Tkinter的是一個獨立的子模塊,所以簡單地做從Tkinter的一個完整的進口:

from tkinter import * 

不會導入的MessageBox

它已被明確導入像這樣:

from tkinter import messagebox 

與ttk必須明確導入相同的方式

它在空閒狀態下工作的原因是因爲閒置導入messagebox用於自己的目的,並且由於閒置工作方式,其進口可在空閒狀態下使用

+0

有道理。好答案。 –

4

IDLE是用Python編寫的,並使用Tkinter作爲GUI,因此它看起來像您的程序使用IDLE自身正在使用的import語句。但是,如果要在IDLE過程之外執行程序,則應該明確包含messageboximport語句。

+0

謝謝。同樣好的答案。 –