无法导入名称'ImageTK'-python 3.5

Posted

技术标签:

【中文标题】无法导入名称\'ImageTK\'-python 3.5【英文标题】:cannot import name 'ImageTK' - python 3.5无法导入名称'ImageTK'-python 3.5 【发布时间】:2017-12-03 18:59:04 【问题描述】:

我正在尝试从与我的 python 脚本所在的文件夹相同的文件夹中加载图像。

# create a class called Person
# create init method
# 2 attributes (name, and birthdate)
# create an object from the Person class

from PIL import Image, ImageTK
import datetime
import tkinter as tk

# create frame
window = tk.Tk()

# create frame geometry
window.geometry("400x400")

# set title of frame
window.title("Age Calculator App")



# adding labels
name_label = tk.Label(text="Name")
name_label.grid(column=0, row=0)

year_label = tk.Label(text="Year")
year_label.grid(column = 0, row = 1)

month_label = tk.Label(text="Month")
month_label.grid(column = 0, row = 2)

day_label = tk.Label(text="Day")
day_label.grid(column = 0, row = 3)


# adding entries
name_entry = tk.Entry()
name_entry.grid(column=1, row=0)

year_entry = tk.Entry()
year_entry.grid(column=1, row=1)

month_entry = tk.Entry()
month_entry.grid(column=1, row=2)

day_entry = tk.Entry()
day_entry.grid(column=1, row=3)


def calculate_age():
    year = int(year_entry.get())
    month = int(month_entry.get())
    day = int(day_entry.get())
    name = name_entry.get()
    person = Person(name, datetime.date(year, month, day))
    text_answer = tk.Text(master=window, wrap=tk.WORD, height=20, width=30)
    text_answer.grid(column= 1, row= 5)
    answer = "name is age years old!".format(name=person.name, age=person.age())
    is_old_answer = " Wow you are getting old aren't you?"
    text_answer.insert(tk.END, answer)
    if person.age() >= 50:
        text_answer.insert(tk.END, is_old_answer)


calculate_button = tk.Button(text="Calculate Age!", command=calculate_age)
calculate_button.grid(column=1, row=4)


class Person:
    def __init__(self, name, birthdate):
        self.name = name
        self.birthdate = birthdate

    def age(self):
        today = datetime.date.today()
        age = today.year - self.birthdate.year
        return age

image = Image.open('LockVectorDaily.jpg')
image.thumbnail((100, 100), Image.ANTIALIAS)
photo = tk.PhotoImage(file=image)
label_image = tk.Label(image=image)
label_image.grid(column=1, row=0)


window.mainloop()

我明白了

from PIL import Image, ImageTK 
ImportError: cannot import name 'ImageTK' 

提前感谢您的帮助!

【问题讨论】:

你是如何安装 PIL 的?安装有问题。 “k”是小写,ImageTk。大写/小写在 Tkinter/tkinter 中有很多人。 【参考方案1】:

对于 Debian/Ubuntu:

Python 2

sudo apt-get install python-imaging python-pil.imagetk

Python 3

sudo apt-get install python3-pil python3-pil.imagetk

对于 Archlinux:

sudo pacman -S python-pillow  

它会安装包,你可以使用它:from PIL import ImageTk

【讨论】:

这是为 Debian/Ubuntu 用户准备的。我认为ImageTk 部分包含在Windows 版本的Pillow 模块(PIL 的分支)中。对于 Archlinux 用户,安装命令是sudo pacman -S python-pillow 由于某种原因,apt 总是可以处理这个依赖 BS 本身,而 Python 不能【参考方案2】:

对于 Ubuntu 18 上的 Python3,我必须卸载 Python (2) 包,然后安装 Python 3 包:

apt-get remove python3-pil python3-pil.imagetk python-pil.imagetk python-pil
apt-get install python3-pil.imagetk # Note that python3-pil installed as a dependency

【讨论】:

对我来说,安装python3-pil.imagetk 就足够了。 apt install python3-pil 提供的 PIL 版本是 (5.1.0),即过时,我没有发现 python3-pil.imagetk 安装在 Ubuntu 18.04 中。注意 PIL 和Pillow 不能共存,应该使用 Pillow,目前是版本 7。所以通过sudo apt remove命令卸载PIL后,你应该通过python3 -m pip install --user Pillow安装PILLOW。它还将确保可以导入ImageTk 第一个命令删除了一些不必要的东西请谨慎使用【参考方案3】:

我试过这个来安装 Pillow 本身,效果很好,我没有使用 sudo。

$ pip install Pillow --user

主要安装指南来源:here

随时编辑我的答案/纠正我。

【讨论】:

【参考方案4】:

问题是你命名错误。

ImageTK 代替 ImageTk

保持k小,它会工作。

-MohsinK-

【讨论】:

【参考方案5】:

您将不得不像这样更改代码:

import PIL
from PIL import ImageTk
from PIL import Image

它应该可以正常工作!

【讨论】:

【参考方案6】:
sudo apt-get install python3-pil.imagetk

它对我有用!

【讨论】:

【参考方案7】:

将 TkImage 和 Image 一起导入时,Python 确实有点动作。您需要先导入 PIL,然后单独导入 TkImage 和 Image,如下所示-

import PIL
from PIL import TkImage
from PIL import Image

这应该可以正常工作。您还可以使用以下命令提示符检查枕头是否正确安装在您的系统中-

    打开命令提示符 输入 python 在 python 中,只需键入:
import PIL
    如果这条命令没有报错,那么按照上面的方法分别导入TkImage和Image就好了。

【讨论】:

【参考方案8】:

我正在使用 python 3.6.9 import tkinter, PIL 当我使用 dir(tkinter) 直接打开 tkinter 模块时,我看到了 PhotoImage 和 Image 方法。 我检查了 PIL 模块,dir(PIL) 我没有看到 上述任何一种方法。

我想不需要导入 PIL ... 它已经在 tkinter 模块中。 所以你可以使用 tkinter.PhotoImage(...) 或者 tkinter.Image(...)

【讨论】:

【参考方案9】:

明白了! 您必须单独导入它们,而不是一行。

from PIL import Image
from PIL import ImageTk

from PIL import Image, ImageTk

【讨论】:

两种情况是等价的。它之所以有效,是因为您将问题的“ImageTK”替换为“ImageTk”,这是正确的名称。

以上是关于无法导入名称'ImageTK'-python 3.5的主要内容,如果未能解决你的问题,请参考以下文章

Python 3 ImportError:无法导入名称“模型选择”OS X 10.11.3,Anaconda

在Python 3中安装createsend时“无法导入名称__version__”

无法导入名称抑制 Python 2.7

为啥我在 Python 中收到错误消息“无法导入名称 NoneType”?

Python ImportError:无法导入名称itemgetter

Python3.6 ImportError:无法导入名称'main'Linux RHEL6