一.ImportError: cannot import name '_imagingtk'

问题描述

使用tkinter画pillow生成的图片时,在tkinter中抛出此异常。

解决方案

pip install -I --no-cache-dir Pillow
更新pillow
重启解决一切问题,重新安装解决一切问题

二.tkinter画图片不起作用

tkinter画pillow图片的代码

import tkinter
from  PIL import Image, ImageTkwindow = tkinter.Tk()
canvas = tkinter.Canvas(window)
img=ImageTk.PhotoImage(Image.open("beauty/0.jpg"))
canvas.create_image(0,0,image=img)
canvas.pack()
window.mainloop()

如果将创建ImageTk.PhotoImage的那句代码放到一个函数中,会出现十分奇葩的现象:图片不显示

import tkinterfrom  PIL import Image, ImageTkdef setImage(canvas):img = ImageTk.PhotoImage(Image.open("../beauty/0.jpg"))x = canvas.create_image(300, 300, image=img) return imgwindow = tkinter.Tk()
canvas = tkinter.Canvas(window, width=400, height=400, bg='green')
setImage(canvas)
canvas.pack()
window.mainloop()

这是因为在setImage(canvas)函数结束返回后,img立马就被回收了。
我只想说:日了狗了才会遇到这种bug。
解决方法是:所有的PhotoImage在mainloop期间必须有引用指向它们。
可以将setImage中的img变量定义成全局变量,也可以在把setImage函数返回来的img保存起来,总之,必须有引用指向PhotoImage,否则立马回收。
这既然是Canvas的bug,那么Canvas该如何改变呢?定义一个数组,把自己画过的所有对象都保存起来。有可能是Canvas底层是C++,导致python和C++不协调。

转载于:https://www.cnblogs.com/weiyinfu/p/6216484.html

tkinter Canvas画图片大坑总结相关推荐

  1. python中mainloop添加背景_Python实例讲解 - tkinter canvas (设置背景图片及文字)

    Python实例讲解 -- tkinter canvas (设置背景图片及文字) 先来一个绘图: from Tkinter import * master = Tk() w = Canvas(mast ...

  2. Python实例讲解 -- tkinter canvas (设置背景图片及文字)

    先来一个绘图: from Tkinter import *master = Tk()w = Canvas(master, width=200, height=100) w.pack()w.create ...

  3. Tkinter Canvas画布 图片导入

    Tkinter Canvas画布 & 图片导入 import tkinter as tk# 实例化一个窗口对象 window = tk.Tk() # 设置title window.title( ...

  4. 关于tkinter.Canvas 不显示图片的问题

    问题描述 本想使用tkinter开发一个"蜘蛛纸牌"游戏, 但是在测试tkinter.Canvas上创建图像时却不显示图像. 测试代码如下: from tkinter import ...

  5. 利用canvas画图片

    canvas画图片的优点: 一张图片的大小可能有几十M,如果加载在网页中就十分耗费资源:H5时,canvas提供了一个方法 drawImage():将原图片像素的内容复制到画布上,占用资源就会很小,因 ...

  6. tkinter Canvas 实现 鼠标手绘画板 功能

    下面代码简单实现了手绘画板功能,其实也是Canvas的教程,后面都给加了注释. 这里通过列表来存储笔画,实现撤销恢复功能,右键有菜单. import tkinter as tk from tkinte ...

  7. python设置背景图片大全_Python实例讲解 - tkinter canvas (设置背景图片及文字)

    Python实例讲解 -- tkinter canvas (设置背景图片及文字) 先来一个绘图: from Tkinter import * master = Tk() w = Canvas(mast ...

  8. python中mainloop添加背景_Python实例讲解 tkinter canvas (设置背景图片及文字)

    Python实例讲解 tkinter canvas (设置背景图片及文字) 2018-09-14 Python实例讲解 -- tkinter canvas (设置背景图片及文字) 博客分类:Pytho ...

  9. Python tkinter canvas方法的Bitmap、stipple参数和组件Bitmap属性的使用以及xbm文件

    xbm文件使用纯文本描述单色位图图像,是一种被广泛使用的通用文件格式,扩展名为xbm.在图形界面(GUI)中,小的单色简单图形.图标和鼠标位图可采用xbm文件.在python中,Canvas多个方法的 ...

最新文章

  1. 如何使用Intel vtune profilier?
  2. 1048 Find Coins(散列解法)
  3. 对计算机技术的发展方向研究,网络技术发展对计算机技术的影响
  4. 云计算,拼的就是运维
  5. STM32F4 HAL库开发 -- 工程模板解读
  6. 参数变化_PDP驱动波形参数分析
  7. UITabBarController 和 UINavigationController 的详解
  8. 关于一道面试题,使用C#实现字符串反转算法
  9. 朗锐智科发布PCIe-3504PoE 千兆以太网图像采集卡
  10. UDF函数,hive调用java包简单方法
  11. Redis详解(五)——Redis多实例
  12. python选择法_新手小白如何学习Python 选对方法很重要(附教程)
  13. 开源,想说爱你不容易
  14. 华铸CAE70(灰铁).
  15. matlab许可证_MATLAB校园许可证更新指南
  16. 程序员教你玩转电脑手机
  17. JAX-RS 从傻逼到牛叉 2:开发一个简单的服务
  18. 苹果或3月8日开新品发布会是真的吗?
  19. 唤醒手腕 - 爆肝 3 天整理出来关于 Opencv 计算机图像处理详细教程(更新中)
  20. d3力导向图增加节点_d3.js力导向图节点如何都显示在边框内

热门文章

  1. 发布npm时遇到的两个小问题,解决方法
  2. celery 实例进阶
  3. JS中的setInterval 函数体带参数f方法
  4. Alt属性 添加的意义
  5. 大白话讲高项高频知识点(在线更新)
  6. 【渗透测试案例】——Web前端的SQL注入是怎么回事?
  7. Windows域控去掉密码强度策略 可以设置简单密码【全域策略生效】
  8. as3 primitives
  9. mysql维护计划 自动备份_MysQL windows 下自动备份,同时加入计划任务脚本
  10. mysql查询中使用别名_如何在MySQL选择查询中使用别名?