2014-07-14 32 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

谢谢。同样好的答案。 –