关于tkinter.Canvas 不显示图片的问题
问题描述
本想使用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 不显示图片的问题相关推荐
- python中mainloop添加背景_Python实例讲解 - tkinter canvas (设置背景图片及文字)
Python实例讲解 -- tkinter canvas (设置背景图片及文字) 先来一个绘图: from Tkinter import * master = Tk() w = Canvas(mast ...
- Python之解决tkinter.PhotoImage不显示图片的问题 Python3
Python之解决tkinter.PhotoImage不显示图片的问题 Python3 开始导航 1. tkinter.PhotoImage()不支持jpg等图片格式 2. 将ImageTk.Phot ...
- python设置背景图片大全_Python实例讲解 - tkinter canvas (设置背景图片及文字)
Python实例讲解 -- tkinter canvas (设置背景图片及文字) 先来一个绘图: from Tkinter import * master = Tk() w = Canvas(mast ...
- python中mainloop添加背景_Python实例讲解 tkinter canvas (设置背景图片及文字)
Python实例讲解 tkinter canvas (设置背景图片及文字) 2018-09-14 Python实例讲解 -- tkinter canvas (设置背景图片及文字) 博客分类:Pytho ...
- tkinter Label Button 显示图片的问题解决
在使用tkinter 中组件显示图片过程中,需要加载PIL模块进行图片处理,才能正常显示. import tkinter import os from PIL import Image,ImageTk ...
- python+tkinter使用canvas不显示图片的问题
python+tkinter中使用canvas 切换不显示图片的问题 一.canvas使用 canvas对象的create_image方法有两个重要的点要注意,一个是格式,第二是要保持持续引用: 1. ...
- Python实例讲解 -- tkinter canvas (设置背景图片及文字)
先来一个绘图: from Tkinter import *master = Tk()w = Canvas(master, width=200, height=100) w.pack()w.create ...
- 在tkinter中显示图片和图片名
Python之解决tkinter.PhotoImage不显示图片的问题 Python3 最近做一个以图搜图的项目时,老师让做一个GUI的界面,因为之前学过tkinter所以信心满满的去做,结果搞了一下 ...
- Tkinter Canvas画布 图片导入
Tkinter Canvas画布 & 图片导入 import tkinter as tk# 实例化一个窗口对象 window = tk.Tk() # 设置title window.title( ...
最新文章
- 容易答错的java面试题_Java程序员面试中最容易答错的8道面试题,你中招了吗?...
- java线程实例题_java线程相关试题实例源码代码
- 一键将Python2代码自动转化为Python3
- Java类加载的那些事
- SAP License:SAP系统上线注意事项之合同日期
- Maven scope中import的作用
- Spring Cloud 尚硅谷阳哥学习笔记,每一行代码均有解释,适合快速上手,并配合尚硅谷视频食用
- typora输入LATEX数学公式语法总结
- 免费IP切换工具有用吗?
- Win10电脑时间无法同步解决方法
- kafka中zk的作用
- matlab需要多大运存_MATLAB下高效使用内存
- 数据治理之敏感数据探查
- 全票通过!微众开源项目EventMesh进入Apache孵化器
- Chrome浏览器常用插件(开发者必备)
- vb.net读取写入EXCEl的终极方法-NOPI
- 文通科技:人工智能时代看票据识别OCR的作用
- starUML工具使用简介
- MySQL之索引知多少
- 服务器租用哪个IDC服务商比较好
热门文章
- ajax调用ajax_AJAX即将到来
- 在那之后,我决定做一个出色的打工仔!
- IOS 5 拦截手机短信(需越狱)
- php array_diff_assoc,关于array_diff_assoc的详细介绍
- 如果你是我眼中一滴泪,那么我永远不会哭
- 【AI人工智能】AI绘画能取代设计师?
- Sentinel SuperPro加密锁编程开发指南
- 无人值守安装系统完整(CentOS7)
- python 共享内存 c_python共享内存 - DK's Blog - 博客园
- 弘辽科技:新手开淘宝店的步骤有哪些?如何起步?