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

Cod*_*aro 12 python tkinter python-imaging-library pillow

我试图从与我的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()
Run Code Online (Sandbox Code Playgroud)

我有

from PIL import Image, ImageTK 
ImportError: cannot import name 'ImageTK' 
Run Code Online (Sandbox Code Playgroud)

提前感谢您的帮助!

med*_*yas 17

我这样做了:

sudo apt-get install python-imaging python-pil.imagetk
Run Code Online (Sandbox Code Playgroud)

对于python3

sudo apt-get install python3-pil python3-pil.imagetk
Run Code Online (Sandbox Code Playgroud)

得到了:

sudo pacman -S python-pillow  
Run Code Online (Sandbox Code Playgroud)

它安装了新的库,它对我有用.


小智 5

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

$ pip install Pillow --user
Run Code Online (Sandbox Code Playgroud)

主要安装指南的来源:这里

请随意编辑我的答案/纠正我。


小智 5

sudo apt-get install python3-pil.imagetk
Run Code Online (Sandbox Code Playgroud)

这对我有用!


Dan*_*son 5

对于 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
Run Code Online (Sandbox Code Playgroud)

  • 对我来说,安装“python3-pil.imagetk”就足够了。 (3认同)

小智 5

问题是你把它命名错了。

ImageTK 代替 ImageTk

保持k小,它就会起作用。


Cod*_*aro -6

搞清楚了!您必须单独导入它们,而不是在一行上导入它们。

from PIL import Image
from PIL import ImageTk
Run Code Online (Sandbox Code Playgroud)

代替

from PIL import Image, ImageTk
Run Code Online (Sandbox Code Playgroud)

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