tk messagebox导入混乱

App*_*ple 9 python import tkinter python-3.x

我刚刚开始学习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()
Run Code Online (Sandbox Code Playgroud)

编译好,但按下按钮会出错'module' object has no attribute 'messagebox',而代码:

import tkinter as tk
from tkinter import messagebox

...
    if messagebox.askokcancel("Quit", "Never Mind"):
...
Run Code Online (Sandbox Code Playgroud)

......工作顺利.

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

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

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

我想应该提一下 - 代码只能在Python 3中运行,并且在Python 2.x messagebox中调用tkMessageBox并且没有定义tkinter.

mat*_*ata 20

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`
Run Code Online (Sandbox Code Playgroud)

  • 问题是您的代码与_every other_ interpreter不兼容.有理由将图书馆分开,这可能是在丰富的Python开发笔记中的某些地方记录的. (2认同)