详解python tkinter 图片插入问题


Posted in Python onSeptember 03, 2020

通过tkinter.PhotoImage插入GIF, PGM/PPM格式的图片。

import tkinter

class Gui:
  def __init__(self):  
    self.gui=tkinter.Tk()                        # create gui window
    self.gui.title("Image Display")                   # set the title of gui 
    self.gui.geometry("800x600")                    # set the window size of gui 

    img = tkinter.PhotoImage(file="C:/Users/15025/Desktop/bear.gif")  # read image from path

    label1=tkinter.Label(self.gui,image=img)              # create a label to insert this image
    label1.grid()                            # set the label in the main window
 
    self.gui.mainloop()                         # start mainloop

main = Gui()

注意: img = tkinter.PhotoImage(file="C:/Users/15025/Desktop/bear.gif") 中的关键字file不能够省略,否则程序无法正常显示图片。

对于常用的PNG,与JPG格式的图片,我们需要从python image library(pillow)(PIL)导入Image与ImageTk模块来实现,代码如下:

import tkinter
from PIL import Image
from PIL import ImageTk


class Gui:
  def __init__(self):  
    self.gui=tkinter.Tk()                # create gui window
    self.gui.title("Image Display")           # set the title of gui 
    self.gui.geometry("800x600")            # set the window size of gui 

    load = Image.open("C:/Users/15025/Desktop/1.png")  # open image from path
    img = ImageTk.PhotoImage(load)           # read opened image

    label1=tkinter.Label(self.gui,image=img)      # create a label to insert this image
    label1.grid()                    # set the label in the main window
 
    self.gui.mainloop()                 # start mainloop

main = Gui()

然而在实际操作中,本人使用的是Anaconda spyder编译器,当我们在读入图像时程序出错后,再次运行程序就会导致image "pyimage1" doesn't exist错误,每次运行一次,数字就会增加1,如:image "pyimage2" doesn't exist。遇到此错误,可以直接在IPython控制台界面重启IPython内核即可,或者关闭编译器并重新打开。

看似我们已经完全实现了图片的插入,但是这种插入方法是存在隐患的,具体代码如下:

import tkinter as tk
from PIL import Image
from PIL import ImageTk


class Gui(tk.Tk):
  def __init__(self):
    super().__init__()
    self.title("Figure dynamic show v1.01")
    # self.geometry("1000x800+400+100")
    self.mainGui()
    # self.mainloop()
    

  def mainGui(self):
    image = Image.open("C:/Users/15025/Desktop/1.png")
    photo = ImageTk.PhotoImage(image)
    label = tk.Label(self, image=photo)
    label.image = photo     # in case the image is recycled
    label.grid()
    

main = Gui()
main.mainloop()

这里我们可以看到相比较上面的程序,我们将Gui界面的图像插入部分分离到另一个函数中,并且直接定义一个tkinter的类,这样做的好处是我们可以直接用self替代创建的主窗口界面,并且我们可以在不同的地方启动主循环,self.mainloop()和main.mainloop()任选一个即可。并且因为我们想要插入图片,所以我们可以省略指定Gui界面的尺寸,这样做的好处是会创建一个自适应图片大小的Gui界面。最重要的是我们可以看到多了一行代码label.image = photo,我们将选取的图片photo赋值给了label的属性对象image,如果没有这一行代码,图片便无法正常显示,这是因为python会自动回收不使用的对象,所以我们需要使用属性对象进行声明。 上述的程序隐患便是因为缺少了这一行代码。

至此,tkinter的图片插入可暂时告一段落。

到此这篇关于详解python tkinter 图片插入问题的文章就介绍到这了,更多相关python tkinter 图片插入内容请搜索三水点靠木以前的文章或继续浏览下面的相关文章希望大家以后多多支持三水点靠木!

Python 相关文章推荐
python 查找文件夹下所有文件 实现代码
Jul 01 Python
pycharm 使用心得(一)安装和首次使用
Jun 05 Python
python中lambda函数 list comprehension 和 zip函数使用指南
Sep 28 Python
Python3中的真除和Floor除法用法分析
Mar 16 Python
浅析Python中MySQLdb的事务处理功能
Sep 21 Python
Python ldap实现登录实例代码
Sep 30 Python
使用Python和OpenCV检测图像中的物体并将物体裁剪下来
Oct 30 Python
Python数据可视化处理库PyEcharts柱状图,饼图,线性图,词云图常用实例详解
Feb 10 Python
Python下载网易云歌单歌曲的示例代码
Aug 12 Python
Python gevent协程切换实现详解
Sep 14 Python
Python通过Schema实现数据验证方式
Nov 12 Python
python3实现简单飞机大战
Nov 29 Python
解决PyCharm IDE环境下,执行unittest不生成测试报告的问题
Sep 03 #Python
PyTorch中Tensor的数据类型和运算的使用
Sep 03 #Python
python开发入门——set的使用
Sep 03 #Python
使用anaconda安装pytorch的实现步骤
Sep 03 #Python
解决Python安装cryptography报错问题
Sep 03 #Python
解决python打开https出现certificate verify failed的问题
Sep 03 #Python
详解torch.Tensor的4种乘法
Sep 03 #Python
You might like
用PHP和ACCESS写聊天室(八)
2006/10/09 PHP
精通Javascript系列之数值计算
2011/06/07 Javascript
window.addEventListener来解决让一个js事件执行多个函数
2012/12/26 Javascript
JavaScript实现数字数组正序排列的方法
2015/04/06 Javascript
简单实现异步编程promise模式
2015/07/31 Javascript
node.js与C语言 实现遍历文件夹下最大的文件,并输出路径,大小
2017/01/20 Javascript
使用 electron 实现类似新版 QQ 的登录界面效果(阴影、背景动画、窗体3D翻转)
2018/10/23 Javascript
JavaScript或jQuery 获取option value值方法解析
2020/05/12 jQuery
实现vuex原理的示例
2020/10/21 Javascript
vue的$http的get请求要加上params操作
2020/11/12 Javascript
python中from module import * 的一个坑
2014/07/20 Python
Python解析xml中dom元素的方法
2015/03/12 Python
python访问mysql数据库的实现方法(2则示例)
2016/01/06 Python
python+pyqt实现12306图片验证效果
2017/10/25 Python
python 删除字符串中连续多个空格并保留一个的方法
2018/12/22 Python
Python实现计算字符串中出现次数最多的字符示例
2019/01/21 Python
详解在Python中以绝对路径或者相对路径导入文件的方法
2019/08/30 Python
如何将 awk 脚本移植到 Python
2019/12/09 Python
Python 中如何实现参数化测试的方法示例
2019/12/10 Python
Pytorch之contiguous的用法
2019/12/31 Python
python和node.js生成当前时间戳的示例
2020/09/29 Python
用html5的canvas和JavaScript创建一个绘图程序的简单实例
2016/07/06 HTML / CSS
澳大利亚领先的在线葡萄酒零售商:Get Wines Direct
2018/03/27 全球购物
英国邮购活的植物主要供应商:Gardening Direct
2019/01/28 全球购物
美国唇部护理专家:Sara Happ
2019/06/19 全球购物
个人优缺点自我评价
2014/01/27 职场文书
小学校园活动策划
2014/01/30 职场文书
英语专业职业生涯规划范文
2014/03/05 职场文书
内衣营销方案
2014/03/15 职场文书
小学一年级学生评语
2014/04/22 职场文书
离婚起诉状范本
2015/05/19 职场文书
Nginx服务器添加Systemd自定义服务过程解析
2021/03/31 Servers
zabbix agent2 监控oracle数据库的方法
2021/05/13 Oracle
Python OpenCV实现传统图片格式与base64转换
2021/06/13 Python
oracle删除超过N天数据脚本的方法
2022/02/28 Oracle
golang用type-switch判断interface的实际存储类型
2022/04/14 Golang