问题描述

本想使用tkinter开发一个"蜘蛛纸牌"游戏, 但是在测试tkinter.Canvas上创建图像时却不显示图像.

测试代码如下:

from tkinter import *
from tkinter import ttk
from PIL import ImageTk, Imageclass SpiderSolitaire(ttk.Frame):def __init__(self, master: Tk, **kw):super().__init__(master, **kw)self.mainframe = ttk.Frame(master)self.mainframe.grid(column=0, row=0, sticky=NSEW)self.canvas = Canvas(self.mainframe, width=400, height=300, background='gray55')self.canvas.grid(row=0, column=0, sticky=NS)im = ImageTk.PhotoImage(Image.open('./images/Spades_1.png'))self.canvas.create_image(30, 10, image=im, anchor='nw')# 这两条线只是为了标明图片要显示的位置.self.canvas.create_line(30, 10, 98, 113, fill='red', width=3)   self.canvas.create_line(30, 113, 98, 10, fill='red', width=3)  # set window's title.self.master.title('Spider Solitaire')# set window's geometry sizeself.master.geometry('400x300')if __name__ == '__main__':root = Tk()SpiderSolitaire(root)root.mainloop()

运行结果如下, 图片未显出出来.

在stackoverflow上找到了相同的问题描述, 里面给出了一个可行的解决方法. 但没有给出此问题的解释. 在其他文章中有说是内存回收的问题, 这种说法还是相对靠谱的.

解决方法

将导入的图片先赋给一个"持久变量", 比如创建一个self.image用来持有导入的PhotoImage, 这样图片就不会被当垃圾回收掉. 如果有多个图片可以创建一个列表来持有.

修改上述测试代码如下:

from tkinter import *
from tkinter import ttk
from PIL import ImageTk, Imageclass SpiderSolitaire(ttk.Frame):def __init__(self, master: Tk, **kw):super().__init__(master, **kw)self.mainframe = ttk.Frame(master)self.mainframe.grid(column=0, row=0, sticky=NSEW)self.canvas = Canvas(self.mainframe, width=400, height=300, background='gray55')self.canvas.grid(row=0, column=0, sticky=NS)# bug fixed: 修改以下两行即可.self.image = ImageTk.PhotoImage(Image.open('./images/Spades_1.png'))self.canvas.create_image(30, 10, image=self.image, anchor='nw')# 这两条线只是为了标明图片要显示的位置.self.canvas.create_line(30, 10, 98, 113, fill='red', width=3)   self.canvas.create_line(30, 113, 98, 10, fill='red', width=3)  # set window's title.self.master.title('Spider Solitaire')# set window's geometry sizeself.master.geometry('400x300')if __name__ == '__main__':root = Tk()SpiderSolitaire(root)root.mainloop()

运行结果如下, 如片确实被显示出来了!o( ̄▽ ̄)ブ

如果以上内容帮到了你, 烦请点赞收藏, !!在此谢过!!

关于tkinter.Canvas 不显示图片的问题相关推荐

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

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

  2. Python之解决tkinter.PhotoImage不显示图片的问题 Python3

    Python之解决tkinter.PhotoImage不显示图片的问题 Python3 开始导航 1. tkinter.PhotoImage()不支持jpg等图片格式 2. 将ImageTk.Phot ...

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

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

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

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

  5. tkinter Label Button 显示图片的问题解决

    在使用tkinter 中组件显示图片过程中,需要加载PIL模块进行图片处理,才能正常显示. import tkinter import os from PIL import Image,ImageTk ...

  6. python+tkinter使用canvas不显示图片的问题

    python+tkinter中使用canvas 切换不显示图片的问题 一.canvas使用 canvas对象的create_image方法有两个重要的点要注意,一个是格式,第二是要保持持续引用: 1. ...

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

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

  8. 在tkinter中显示图片和图片名

    Python之解决tkinter.PhotoImage不显示图片的问题 Python3 最近做一个以图搜图的项目时,老师让做一个GUI的界面,因为之前学过tkinter所以信心满满的去做,结果搞了一下 ...

  9. Tkinter Canvas画布 图片导入

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

最新文章

  1. 容易答错的java面试题_Java程序员面试中最容易答错的8道面试题,你中招了吗?...
  2. java线程实例题_java线程相关试题实例源码代码
  3. 一键将Python2代码自动转化为Python3
  4. Java类加载的那些事
  5. SAP License:SAP系统上线注意事项之合同日期
  6. Maven scope中import的作用
  7. Spring Cloud 尚硅谷阳哥学习笔记,每一行代码均有解释,适合快速上手,并配合尚硅谷视频食用
  8. typora输入LATEX数学公式语法总结
  9. 免费IP切换工具有用吗?
  10. Win10电脑时间无法同步解决方法
  11. kafka中zk的作用
  12. matlab需要多大运存_MATLAB下高效使用内存
  13. 数据治理之敏感数据探查
  14. 全票通过!微众开源项目EventMesh进入Apache孵化器
  15. Chrome浏览器常用插件(开发者必备)
  16. vb.net读取写入EXCEl的终极方法-NOPI
  17. 文通科技:人工智能时代看票据识别OCR的作用
  18. starUML工具使用简介
  19. MySQL之索引知多少
  20. 服务器租用哪个IDC服务商比较好

热门文章

  1. ajax调用ajax_AJAX即将到来
  2. 在那之后,我决定做一个出色的打工仔!
  3. IOS 5 拦截手机短信(需越狱)
  4. php array_diff_assoc,关于array_diff_assoc的详细介绍
  5. 如果你是我眼中一滴泪,那么我永远不会哭
  6. 【AI人工智能】AI绘画能取代设计师?
  7. Sentinel SuperPro加密锁编程开发指南
  8. 无人值守安装系统完整(CentOS7)
  9. python 共享内存 c_python共享内存 - DK's Blog - 博客园
  10. 弘辽科技:新手开淘宝店的步骤有哪些?如何起步?