Big*_*pie 2 python tkinter messagebox nameerror
以下代码在IDLE中运行正常,但我得到"NameError:全局名称'messagebox'未定义".但是,如果我明确说明from tkinter import messagebox,它可以从任何地方运行.
from tkinter import *
from tkinter import ttk
root = Tk()
mainFrame = ttk.Frame(root)
messagebox.showinfo("My title", "My message", icon="warning", parent=mainFrame)
Run Code Online (Sandbox Code Playgroud)
为什么IDLE不需要显式的import语句,但在其他地方需要它?
messagebox是tkinter的一个独立子模块,所以只需从tkinter完全导入:
from tkinter import *
Run Code Online (Sandbox Code Playgroud)
不导入消息框
它必须像这样明确导入:
from tkinter import messagebox
Run Code Online (Sandbox Code Playgroud)
与必须明确导入ttk的方式相同
它在空闲时工作的原因是因为空闲导入消息箱用于它自己的目的,并且由于空闲的方式工作,它的导入在闲置工作时是可访问的
IDLE 是用 Python 编写的,GUI 使用 Tkinter,因此看起来您的程序正在使用importIDLE 本身正在使用的语句。但是,如果您想在 IDLE 进程之外执行您的程序,您应该显式包含import语句messagebox。