问题描述
出于某种原因,Tkinter 无法打开我的图像。如果我不添加 from tkinter import *
,它会显示错误消息:
没有 from tkinter import *
的错误消息:
C:\Users\NG>python e:/PythonTkinter/app.py
Traceback (most recent call last):
File "e:/PythonTkinter/app.py",line 12,in <module>
logo = Image.open('logo.png')
File "C:\Users\NG\anaconda3\lib\site-packages\PIL\Image.py",line 2891,in open
fp = builtins.open(filename,"rb")
FileNotFoundError: [Errno 2] No such file or directory: 'logo.png'
如果我添加 from tkinter import *
如下所示,它会显示如下所示的错误消息。
代码:
import tkinter as tk
import PyPDF2
from PIL import Image,ImageTk
from tkinter import *
# begaining of our UI window
root = tk.Tk()
canvas = tk.Canvas(root,width=600,height=300)
canvas.grid(columnspan=3)
# Adding logo
# logo = ImageTk.PhotoImage(Image.open("logo.png"))
logo = Image.open("logo.png")
logo = ImageTk.PhotoImage(logo)
logo_label = tk.Label(image=logo)
loogo_label.image = logo
logo_label.grid(column=1,row=0)
# ending of our UI window
root.mainloop()
带有 from tkinter import *
的错误消息:
C:\Users\NG>python e:/PythonTkinter/app.py
Traceback (most recent call last):
File "e:/PythonTkinter/app.py",line 14,in <module>
logo = Image.open("logo.png")
AttributeError: type object 'Image' has no attribute 'open'
我做错了什么? 帮助!
解决方法
说明:-
您可能应该了解什么是相对路径。当使用相对路径时,它不是相对于 python 文件的位置,而是你运行 python 文件的位置。您正在从以下位置运行文件:
C:\用户\NG
但是你的python文件和你正在使用的图像在里面:
e:/PythonTkinter/app.py
解决方案:-
所以在这里,您可以将运行代码的位置更改为带有图像文件的位置,也可以将图像复制到运行 py 文件的位置(即,'C:\Users\ NG')。
就第二个错误而言,说 from x import *
从来都不是一个好主意。当您从 tkinter
导入 '*' 时,它会将 PIL.Image
替换为 tkinter.Image
。因此错误。所以要么删除那条线,要么把它移到最上面。推荐的导入是:
import tkinter as tk
import PyPDF2
from PIL import Image,ImageTk
您在这里只使用了第一个导入,所以我认为使用 from tkinter import *
没有意义,所以只需将其删除。
您可以简单地执行以下操作
from tkinter import *
window = Tk() # instantiate an instance of a window for us
window.geometry("500x500")
#creating a photo image from png photo
icon = PhotoImage(file='GUI using Python\\flower.png')
window.iconphoto(True,icon)
window.mainloop()
从注释开始(从png照片创建照片图像),你在文件参数中给一个值相对路径而不是完整路径,还要注意反斜杠,你应该写两个反斜杠,不需要全部除非您将它们用于其他任务,否则您正在使用这些库。
,您的 PIL 导入应该在 'from tkinter import *' 之后。还要确保与图像在同一目录中