from PIL import Image
img = Image.open('.\images\chapter5.png')
img.show()
正常显示:
from PIL import Image
from tkinter import *
img = Image.open('.\images\chapter5.png')
img.show()
会报错,无法显示图片
AttributeError: type object 'Image' has no attribute 'open'
问了一下大语言模型,给出的回复是这样的
在 Python 中,使用 from tkinter import * 语句会从 tkinter 模块中导入其所有公共类、函数和变量。这种导入方式虽然方便,但通常不推荐,因为它可能会导致命名冲突,并且使得代码的可读性和可维护性降低。
当你使用 from tkinter import * 时,你不需要再使用 tkinter. 前缀来访问导入的内容。例如,你可以直接创建窗口对象 Tk() 而不是 tkinter.Tk(),同样地,你可以直接使用 Button、Label 等类而不需要前缀。
然而,这种导入方式的缺点包括:
命名冲突:如果 tkinter 中有一个名为 Button 的类,而你的代码或另一个导入的模块中也有一个名为 Button 的类或变量,那么它们将会冲突,导致不可预测的行为。
代码可读性:对于阅读你代码的人来说,不清楚某个类或函数是来自 tkinter 还是其他模块,或者是你自己定义的。这增加了理解代码的难度。
命名空间污染:导入所有内容会占用更多的命名空间,这可能会增加内存使用,并且在大型项目中可能会导致性能问题。
因此,更推荐的做法是使用别名导入或明确指定要导入的内容。**