shatanzongcai 发表于 2020-4-10 15:12:11

有关 from 模块 import *的问题

请问各位鱼友,from 模块 import * 到底该怎么使用呢?

from tkinter import *

window = Tk()

window.geometry('200x200')

def hit_me():
    messagebox.showinfo(title='hi',text='hahaha')


b = Button(window,text ='hit me', command = hit_me)

b.pack()
mainloop()

我输入了以上代码,希望使用tkinter里面的messagebox,但是不知道为什么报错了,报错内容是:NameError: name 'messagebox' is not defined。

我之前一直认为from tkinter import * 意味着tkinter里面所有的类,函数之类的都可以直接使用不需要再加上tkinter,但是这个messagebox为什么不能呢?

我上网找了一下其他资料,发现别人的做法是还要再写一句from tkinter import messagebox。 那import * 到底意味着什么呢?

qiuyouzhi 发表于 2020-4-10 15:16:34

模块有一个__all__属性,
里面就是from 模块 import *可以导入的东西,
不在这里面的都得单独导入。

永恒的蓝色梦想 发表于 2020-4-10 15:20:25

本帖最后由 永恒的蓝色梦想 于 2020-4-10 16:00 编辑

messagebox 是 tkinter 包中的另一个文件,from tkinter import * 并不会导入这个文件,只会导入 tkinter 包中 __init__.py 的内容

shatanzongcai 发表于 2020-4-10 15:34:59

永恒的蓝色梦想 发表于 2020-4-10 15:20
messagebox 是一个包,from tkinter import * 并不会导入包,只会导入 tkinter 本身的内容

请问包是指什么呢,tkinter是一个文件包含了很多模块,还是说只是一个模块呢?

永恒的蓝色梦想 发表于 2020-4-10 15:40:01

shatanzongcai 发表于 2020-4-10 15:34
请问包是指什么呢,tkinter是一个文件包含了很多模块,还是说只是一个模块呢?

tkinter是一个文件夹,一个文件夹就是一个包

shatanzongcai 发表于 2020-4-10 15:43:59

永恒的蓝色梦想 发表于 2020-4-10 15:40
tkinter是一个文件夹,一个文件夹就是一个包

也就是说其实messagebox是文件夹中的另外一个文件夹吗

永恒的蓝色梦想 发表于 2020-4-10 15:56:56

shatanzongcai 发表于 2020-4-10 15:43
也就是说其实messagebox是文件夹中的另外一个文件夹吗

那啥,很抱歉,刚才说错了一点,messagebox不是一个包,只是一个文件,但tkinter是一个包,messagebox就在tkinter里。
你可以去 你python的安装目录\Lib\tkinter 来观察这个结构

shatanzongcai 发表于 2020-4-10 16:07:46

永恒的蓝色梦想 发表于 2020-4-10 15:56
那啥,很抱歉,刚才说错了一点,messagebox不是一个包,只是一个文件,但tkinter是一个包,messagebox就 ...

我了解了tkinter和messagebox的关系,我顺便打开了__init__那个模块里面看了一下,发现Label,Message,Menubutton之类的东西包含在这个文件里,所以说,当我使用from tkinter import * 实际上我是在调用 __init__这个模块吗

永恒的蓝色梦想 发表于 2020-4-10 16:10:22

shatanzongcai 发表于 2020-4-10 16:07
我了解了tkinter和messagebox的关系,我顺便打开了__init__那个模块里面看了一下,发现Label,Message,Me ...

可以这么理解

shatanzongcai 发表于 2020-4-10 16:13:01

永恒的蓝色梦想 发表于 2020-4-10 16:10
可以这么理解

非常感谢!
页: [1]
查看完整版本: 有关 from 模块 import *的问题