【问题标题】:Error "type object 'Image' has no attribute 'open'错误“类型对象‘图像’没有属性‘打开’
【发布时间】:2021-05-29 18:26:07
【问题描述】:

所以我试图让用户为标志上传图像,但我不断收到相同的错误“类型对象'图像'没有属性'打开'”。 我已经查过了,似乎找不到答案。我尝试将 Image 作为 IMG 导入,但出现错误“'module' object is not callable”。我试过了

import PIL.Image

我得到了同样的错误。

# Imports
from tkinter import * # Tkinter is a GUI toolkit used for Python. This toolkit allows me to create the window and many of the UI options
import Pmw # Pmw stands for 'Python mega widgets'. I imported this primarily for tooltips so the user knows what everything means
from tkinter import Image
from tkinter import filedialog

文件浏览器打开功能

def flagOpener():
        global flagIMG
        flagPath = filedialog.askopenfilename(initialdir="/", title="Select an Image File", filetypes=(("Png Files", "*.png"), ("Jpeg Files", "*.jpg; *.jpeg"), ("All Files", "*.*")))
        flagIMG = Image(Image.open(flagPath))
        flagLabel = Label(image=flagIMG)

还有按钮

flagSelect = Button(politicalframe, text = "Select Flag", command=flagOpener())
flagSelect.pack()

【问题讨论】:

  • from PIL import ImageTk,Image; img = ImageTk.PhotoImage(Image.open("ball.png")) 这个呢?
  • Image 不能同时表示 PIL.Imagetkinter.Image
  • 不胜感激在下面标记正确答案:D

标签: python tkinter


【解决方案1】:

您的导入语句搞砸了,python 混淆了来自PILImage 和来自tkinterImage。你应该做的是:

import PIL
....

def flagOpener():
    global flagIMG
    flagPath = filedialog.askopenfilename(initialdir="/", title="Select an Image File", filetypes=(("Png Files", "*.png"), ("Jpeg Files", "*.jpg; *.jpeg"), ("All Files", "*.*")))
    flagIMG = Image(PIL.Image.open(flagPath))
    flagLabel = Label(image=flagIMG)

另外,我认为您不应该使用来自tkinterImage,而是使用来自PILImageTk.PhotoImage,这样所有问题都可能消失:

from PIL import Image, ImageTk
...

def flagOpener():
    global flagIMG
    flagPath = filedialog.askopenfilename(initialdir="/", title="Select an Image File", filetypes=(("Png Files", "*.png"), ("Jpeg Files", "*.jpg; *.jpeg"), ("All Files", "*.*")))
    flagIMG = ImageTk.PhotoImage(Image.open(flagPath))
    flagLabel = Label(image=flagIMG)

那么你的按钮应该是:

flagSelect = Button(politicalframe, text = "Select Flag", command=flagOpener) # Remove the () so your not calling it immediately
flagSelect.pack()

另外,如果您打算稍后使用此代码制作一个 exe,那么 Pmw 会给您所有未调用的错误,所以我建议您制作自己的工具提示,如提到的 here 或解决按照这个帖子的答案来解决这个错误:How can I convert a .py to .exe using pmw?

【讨论】:

    猜你喜欢
    • 2019-05-16
    • 1970-01-01
    • 1970-01-01
    • 2018-12-07
    • 2017-11-12
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2010-12-23
    相关资源
    最近更新 更多