python - 尝试在 tkinter 画布中显示图像时出错
问题描述
我试图创建并显示一个空图像以供稍后编辑和更新。此代码在不使用 tkinter 时有效,只是图像显示。当我运行以下代码时:
from random import randint
from time import *
from PIL import Image as Img
from PIL import ImageTk as ImgTk
from tkinter import *
main = Tk()
main.geometry('1001x1001')
width, height = map(int, input('width and height\n').split())
canvas = Canvas(main, width = width, height = height)
canvas.pack()
next_cells = []
img = Img.new('RGB', (width, height))
pix = img.load()
tkpix = ImgTk.PhotoImage(pix)
imgsprite = canvas.create_image(width,height,image=pix)
main.mainloop()
我收到以下错误:
File "/Applications/eeie", line 14, in <module>
tkpix = ImgTk.PhotoImage(pix)
File "/Library/Frameworks/Python.framework/Versions/3.8/lib/python3.8/site-packages/PIL/ImageTk.py", line 108, in __init__
mode = Image.getmodebase(mode)
File "/Library/Frameworks/Python.framework/Versions/3.8/lib/python3.8/site-packages/PIL/Image.py", line 275, in getmodebase
return ImageMode.getmode(mode).basemode
File "/Library/Frameworks/Python.framework/Versions/3.8/lib/python3.8/site-packages/PIL/ImageMode.py", line 64, in getmode
return _modes[mode]
builtins.KeyError: <PixelAccess object at 0x108aa4790>
是什么导致了这个错误?
解决方案
给你,代码中的描述。
from tkinter import *
import Image, ImageTk
# create canvas
canvas = Canvas(width=300, height=200, bg='black')
canvas.pack()
# create image object
img = Image.new('RGB', (60, 30), color='red')
new_image = ImageTk.PhotoImage(img)
# load into canvas
canvas.create_image(50, 10, image=new_image, anchor=NW)
mainloop()
输出:
更新画布创建功能,并在对对象进行更改后更新根。
from tkinter import *
import Image, ImageTk
import time
def update_position():
while True:
canvas.move(rectangle, 30, 10)
time.sleep(1)
root.update()
root = Tk()
# create canvas
canvas = Canvas(root, width=300, height=200, bg='black')
canvas.pack()
# create image object
img = Image.new('RGB', (60, 30), color='red')
new_image = ImageTk.PhotoImage(img)
# load into canvas
rectangle = canvas.create_image(50, 10, image=new_image, anchor=NW)
update_position()
root.mainloop()
推荐阅读
- shell - 使用 shell 脚本从文本文件中提取值
- c# - 是否有 Semaphore Slim 版本或其他方法可以让同一线程进入下游?
- python - Flask jwt POST 数据到带有令牌的端点
- css - 为什么 h1 不能仅内联着色?
- python - Azure ML:将文件上传到 Step Run 的输出 - 身份验证错误
- excel - VBA 代码错误“无效或不合格的参考”
- wordpress - wordpress 中的 .htaccess 没有实现从 www 到非 www 的重定向
- sql - 带有视图和连接的 Oracle 分层查询
- node.js - 如何使用 TypeORM 在没有时区的 Oracle DB 中存储日期
- c++ - 当文件存在并与 onedrive 同步时,_open 失败并显示 O_TRUNC