tk messagebox导入混乱

时间:2013-05-04 13:24:36

标签: python python-3.x tkinter import

我刚刚开始学习tkinter,当导入messagebox时,我发现我一定不能理解import语句。

令我困惑的是:

import tkinter as tk

def text_box():
    if tk.messagebox.askokcancel("Quit", "Never Mind"):
        root.destroy()

root = tk.Tk()
button = tk.Button(root, text="Press the button", command=text_box)
button.pack()
root.mainloop()

编译正常,但按下按钮会出现错误'module' object has no attribute 'messagebox',而代码为:

import tkinter as tk
from tkinter import messagebox

...
    if messagebox.askokcancel("Quit", "Never Mind"):
...

......毫无障碍地工作。

如果我使用from tkinter import *导入,我会收到类似的错误。

tkinter的帮助在messagebox列表中显示PACKAGE CONTENTS,但我无法以正常方式加载它。

所以我的问题是,为什么......以及我不明白的导入是什么?

我想应该提一下 - 该代码仅适用于Python 3,而Python 2.x messagebox称为tkMessageBox,并且未在tkinter中定义。

2 个答案:

答案 0 :(得分:19)

tkinter.messagebox是一个模块,而不是一个类。

由于未在tkinter.__init__.py导入,因此您必须先导入它才能使用它。

import tkinter
tkinter.messagebox  # would raise an ImportError
from tkinter import messagebox
tkinter.messagebox  # now it's available eiter as `messagebox` or `tkinter.messagebox`

答案 1 :(得分:0)

试试这个

import sys

from tkinter import *

...和你的代码