有关 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 * 到底意味着什么呢?
模块有一个__all__属性,
里面就是from 模块 import *可以导入的东西,
不在这里面的都得单独导入。 本帖最后由 永恒的蓝色梦想 于 2020-4-10 16:00 编辑
messagebox 是 tkinter 包中的另一个文件,from tkinter import * 并不会导入这个文件,只会导入 tkinter 包中 __init__.py 的内容 永恒的蓝色梦想 发表于 2020-4-10 15:20
messagebox 是一个包,from tkinter import * 并不会导入包,只会导入 tkinter 本身的内容
请问包是指什么呢,tkinter是一个文件包含了很多模块,还是说只是一个模块呢? shatanzongcai 发表于 2020-4-10 15:34
请问包是指什么呢,tkinter是一个文件包含了很多模块,还是说只是一个模块呢?
tkinter是一个文件夹,一个文件夹就是一个包 永恒的蓝色梦想 发表于 2020-4-10 15:40
tkinter是一个文件夹,一个文件夹就是一个包
也就是说其实messagebox是文件夹中的另外一个文件夹吗 shatanzongcai 发表于 2020-4-10 15:43
也就是说其实messagebox是文件夹中的另外一个文件夹吗
那啥,很抱歉,刚才说错了一点,messagebox不是一个包,只是一个文件,但tkinter是一个包,messagebox就在tkinter里。
你可以去 你python的安装目录\Lib\tkinter 来观察这个结构 永恒的蓝色梦想 发表于 2020-4-10 15:56
那啥,很抱歉,刚才说错了一点,messagebox不是一个包,只是一个文件,但tkinter是一个包,messagebox就 ...
我了解了tkinter和messagebox的关系,我顺便打开了__init__那个模块里面看了一下,发现Label,Message,Menubutton之类的东西包含在这个文件里,所以说,当我使用from tkinter import * 实际上我是在调用 __init__这个模块吗 shatanzongcai 发表于 2020-4-10 16:07
我了解了tkinter和messagebox的关系,我顺便打开了__init__那个模块里面看了一下,发现Label,Message,Me ...
可以这么理解 永恒的蓝色梦想 发表于 2020-4-10 16:10
可以这么理解
非常感谢!
页:
[1]