67193114 发表于 2022-5-11 11:11:35

关于模块导入问题。

本人使用的是Python310版本,学习过程中关于模块导入有些疑问。
视频课程78将,tkinter14中,小甲鱼老师说messagebox模块已经含在tkinter中,可以通过from tkinter import *命令后直接使用。
但实际情况并不行。
Python安装目录的libs目录中确实有tkinter这个包,包里面也确实存在messagebox这个模块,但是使用from tkinter import *命令确实无法激活使用。
而是必须用import tkinter.messagebox as xxx方式才行。

针对这个问题,个人感觉有些疑惑。难道from tkinter import *命令并不是将tkinter包中的所有模块导入吗?
虽然教程上说from XXX import xxx是将模块中的方法导入,但我看网上很多人就是用这个命令导入了包中的所有模块。
类似的例子 网上很多,比如:from urllib import *后直接可以使用request和response等模块,但我实际操作确实不行,必须是import urllib.request。

请各位老师答疑解惑!

isdkz 发表于 2022-5-11 11:30:35

你说的不行是报错了?

报错的话请提供报错信息

67193114 发表于 2022-5-11 11:33:58

感觉from tkinter import *命令仅仅是将tkinter目录(包)中__init__和__main__两个模块的所有方法进行了导入,
而不包含tkinter包中其它已存在的模块

67193114 发表于 2022-5-11 11:39:05

本帖最后由 67193114 于 2022-5-11 11:40 编辑

isdkz 发表于 2022-5-11 11:30
你说的不行是报错了?

报错的话请提供报错信息

异常:
from tkinter import *
messagebox
Traceback (most recent call last):
File "<pyshell#1>", line 1, in <module>
    messagebox
NameError: name 'messagebox' is not defined
===============================
正常:
import tkinter.messagebox as messagebox
messagebox.askokcancel('1','2')

67193114 发表于 2022-5-11 11:42:55

isdkz 发表于 2022-5-11 11:30
你说的不行是报错了?

报错的话请提供报错信息

isdkz 发表于 2022-5-11 11:49:26

本帖最后由 isdkz 于 2022-5-11 12:44 编辑

67193114 发表于 2022-5-11 11:33
感觉from tkinter import *命令仅仅是将tkinter目录(包)中__init__和__main__两个模块的所有方法进行了导 ...

from tkinter import * 是将 tkinter 包下的 __init__.py

里面的 __all__指定的对象导入

67193114 发表于 2022-5-11 11:55:39

isdkz 发表于 2022-5-11 11:49
from tkinter import * 是将 tkinter 包下的 __init__.py 里面的 __all__

指定的对象导入

那就明白了。第78讲有些误导了(零基础老课件78将tkinter14,第1分25秒)。应该是需要把具体方法写到__init__中才行。

67193114 发表于 2022-5-11 11:58:01

isdkz 发表于 2022-5-11 11:49
from tkinter import * 是将 tkinter 包下的 __init__.py 里面的 __all__

指定的对象导入

多谢老师指点!
页: [1]
查看完整版本: 关于模块导入问题。