当前位置: 首页 > 知识库问答 >
问题:

Tkinter/ImageTk显示png图像时的“AttributeError”

丁理
2023-03-14

我试图使用PIL库的ImageTk模块的帮助下,在Tkinter按钮小部件中使用PNG图像。

image = Image.open(os.path.join('icons','bulb.png')) # using PIL for png images
        self.correctGuessImage = ImageTk.PhotoImage(image)

在Windows7x64下工作正常,但在LinuxMintx64上无法工作。我在运行同一个文件时遇到此错误。

  File "/home/user/Documents/temp.py", line 222, in drawButtons
    self.correctGuessImage = ImageTk.PhotoImage(image)
  File "/usr/lib/python2.7/dist-packages/PIL/ImageTk.py", line 121, in __init__
    self.paste(image)
  File "/usr/lib/python2.7/dist-packages/PIL/ImageTk.py", line 171, in paste
    im.load()
  File "/usr/lib/python2.7/dist-packages/PIL/ImageFile.py", line 192, in load
    d = Image._getdecoder(self.mode, d, a, self.decoderconfig)
AttributeError: 'module' object has no attribute '_getdecoder'

我安装了所有我能找到的'python','png'和'tk'从代表,但没有效果。有什么想法为什么会发生这种情况以及如何解决这个问题吗?

共有1个答案

郎华皓
2023-03-14

我设法解决了这个奇怪的问题。如果您使用的是LinuxMint,您将从销售代表那里安装枕头,不要!首先确保您有tk8。5-dev和tcl8。5-dev通过PIP打包并安装枕头。

$ sudo pip install pillow

PIP应在您的机器上安装tk和tcl开发包,以解决上述问题。确保您没有实际的PIL库,因为Pillow和PIL不兼容。我觉得这相当令人沮丧,因为HP打印机的用户不会很高兴不能使用hplip(python imaging compat的依赖项)

我在这一页上找到了建议。

 类似资料:
  • 问题内容: 我有点卡住。为什么不做这项工作?我只是收到一条错误消息: java.lang.NoSuchMethodError:主要 线程“主”中的异常 问题答案: main需要是静态的,并且必须具有String []而不是String的参数。 为了解决这个问题,将所有东西都放在构造函数中,例如

  • 问题内容: 我当然希望我缺少一些东西,因为我不明白为什么这样做会起作用。我有一个PNG图片,它具有完全透明的背景,因为我想将其覆盖在内的其他图片上。 XCode项目中包含的PNG图像都可以正常工作。问题是,当我使用即时选择这些相同的PNG图像,然后将其分配给时,出于某些非常奇怪的原因,它没有将其视为具有透明性的PNG图像,而是添加了白色背景。 有人以前见过这个,我该如何解决? *更新#1: 我决定

  • 本文向大家介绍python tkinter canvas 显示图片的示例,包括了python tkinter canvas 显示图片的示例的使用技巧和注意事项,需要的朋友参考一下 先来看一下该方法的说明 关于image有两个重要的点要注意,一个是格式,第二是要保持持续引用 The image object. This should be a 1.This should be a PhotoImag

  • 我一直在TkinterGUI上工作,而且是新手。现在我想使用Opencv显示一个图像,在一个单独的窗口中单击按钮,因此首先我使用askopenfilename()获取图像路径,然后将该值传递给cv2。下面是imread()代码。 图像显示在一个新窗口中,但当我试图关闭它时,Tkinter应用程序也会关闭。我需要在图像上执行一些任务,然后在不影响Tkinter应用程序的情况下按键关闭它。它可以用线程

  • 我创建了一个简短的脚本来显示Tkinter画布元素中的照片。我将画布元素的大小与照片大小相同,但是当我启动窗口时,无论我如何扩展窗口,我通常只能看到图像的一小部分。 另外,当我打印出图像的大小时,我用它来设置画布的大小,这个大小是(922614),而当我在画布上记录鼠标点击时,右下角大约是(500300)。我的代码如下。我应该改变什么,使画布与图像大小相同,并完全显示图像? 下面是一个屏幕截图,显

  • 我正在使用AngularJS。我将图像显示为:src=“data:image/png;base64,ivborw0kg...”成功了。当我把'png'改成jpeg、gif或jpg时,什么也没有发生。它仍然正确显示。所以我想问你前缀对显示图像的影响是不是?消极还是积极? 此外,我接收的数据图像从服务器没有任何前缀。所以我必须设置一个硬代码'data:image/png;base64,‘。这是好还是坏