【问题标题】:Tkinter can't open imageTkinter 无法打开图片
【发布时间】:2021-03-14 15:26:26
【问题描述】:

由于某种原因,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 文件所在的同一文件夹中。

我做错了什么? 帮助!

【问题讨论】:

  • 对于第二个错误,您的导入搞砸了。删除 from tkinter import * 或将其移至顶部。
  • 第二种情况是因为from tkinter import *。有一个 tkinter.Image 代替了 PIL 中的那个。
  • ~ 如果它正确回答了您的问题,将不胜感激将下面的答案标记为正确答案。点击here了解如何:D

标签: python tkinter tkinter-canvas tkinter-entry tkinter-layout


【解决方案1】:

说明:-

你应该明白什么是相对路径。当使用相对路径时,它不是相对于 python 文件的位置,而是你运行 python 文件的位置。您在此处运行文件:

C:\Users\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 * 有什么意义,所以只需将其删除。

【讨论】:

    【解决方案2】:

    你可以简单地做如下

    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照片创建照片图像),你在文件参数中给一个值是相对路径而不是完整路径,还要注意反斜杠,你应该写两个反斜杠,不需要所有您正在使用的这些库中的一个,除非您指望它们来完成其他任务。

    【讨论】:

      【解决方案3】:

      您的 PIL 导入应该在 'from tkinter import *' 之后。还要确保与图像在同一目录中

      【讨论】:

      • 导入顺序无关紧要,除非您使用通配符 * 并且这些模块具有相同名称的类。
      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2013-10-02
      • 1970-01-01
      • 1970-01-01
      • 2013-05-28
      • 1970-01-01
      相关资源
      最近更新 更多