在 python 3 上使用 tkinter 打开图像

Posted

技术标签:

【中文标题】在 python 3 上使用 tkinter 打开图像【英文标题】:Opening images using tkinter on python 3 【发布时间】:2015-07-17 23:44:11 【问题描述】:

我在 Python 3 上编写了以下(非常短的)代码:

from tkinter import *
from PIL import Image, ImageTk

image = Image.open("Trollface.jpg")
photo = ImageTk.PhotoImage(image)
canvas.create_image(0, 0, image = photo)

当我运行它时,我只是得到以下错误:

Traceback (most recent call last):
  File "<stdin>", line 1, in <module>
  File "C:\WinPython-64bit-3.4.3.4\python-3.4.3.amd64\lib\site-packages\spyderlib\widgets\externalshell\sitecustomize.py", line 685, in runfile
    execfile(filename, namespace)
  File "C:\WinPython-64bit-3.4.3.4\python-3.4.3.amd64\lib\site-packages\spyderlib\widgets\externalshell\sitecustomize.py", line 85, in execfile
    exec(compile(open(filename, 'rb').read(), filename, 'exec'), namespace)
  File "C:/Comp Sci/USB_Virus/trollface_puzzle_picture.py", line 12, in <module>
    photo = ImageTk.PhotoImage(image)
  File "C:\WinPython-64bit-3.4.3.4\python-3.4.3.amd64\lib\site-packages\PIL\ImageTk.py", line 112, in __init__
    self.__photo = tkinter.PhotoImage(**kw)
  File "C:\WinPython-64bit-3.4.3.4\python-3.4.3.amd64\lib\tkinter\__init__.py", line 3416, in __init__
    Image.__init__(self, 'photo', name, cnf, master, **kw)
  File "C:\WinPython-64bit-3.4.3.4\python-3.4.3.amd64\lib\tkinter\__init__.py", line 3357, in __init__
    raise RuntimeError('Too early to create image')
RuntimeError: Too early to create image

我做错了什么?

【问题讨论】:

【参考方案1】:

你需要先创建一个Tk的实例:

root = Tk()

from tkinter import *
from PIL import Image, ImageTk


root = Tk()

canvas = Canvas(width=500, height=500, bg='white')
canvas.pack()
image = Image.open("Trollface.jpg")
photo = ImageTk.PhotoImage(image)
canvas.create_image(250, 250, image=photo)

root.mainloop()

上面的代码本质上来自from here。

【讨论】:

以上是关于在 python 3 上使用 tkinter 打开图像的主要内容,如果未能解决你的问题,请参考以下文章

使用python3在Raspberry Pi上打开和关闭Tkinter GUI

使用 tkinter 打开其他 Python 3 文件 [重复]

使用python 3.5在centos 6.5上安装tkinter

在使用 Python 3 的 Mac 上没有名为“_tkinter”的模块

让 tkinter 在带有 asdf 的 macos 上使用 python 3.x

Python Tkinter。以画布形式打开 BMP 文件