详解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遍历目录的4种方法实例介绍
Apr 13 Python
python使用win32com库播放mp3文件的方法
May 30 Python
numpy中实现ndarray数组返回符合特定条件的索引方法
Apr 17 Python
Python爬虫实现全国失信被执行人名单查询功能示例
May 03 Python
利用python对Excel中的特定数据提取并写入新表的方法
Jun 14 Python
Python基于分析Ajax请求实现抓取今日头条街拍图集功能示例
Jul 19 Python
详解Python list和numpy array的存储和读取方法
Nov 06 Python
如何给Python代码进行加密
Jan 10 Python
python matplotlib.pyplot.plot()参数用法
Apr 14 Python
python re模块和正则表达式
Mar 24 Python
Python爬取英雄联盟MSI直播间弹幕并生成词云图
Jun 01 Python
浅谈Python3中datetime不同时区转换介绍与踩坑
Aug 02 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
把从SQL中取出的数据转化成XMl格式
2006/10/09 PHP
vBulletin HACK----显示话题大小和打开新窗口于论坛索引页
2006/10/09 PHP
探讨:如何通过stats命令分析Memcached的内部状态
2013/06/14 PHP
php实现图片添加水印功能
2014/02/13 PHP
Yii配置与使用memcached缓存的方法
2016/07/13 PHP
Yii中的cookie的发送和读取
2016/07/27 PHP
PHP JWT初识及其简单示例
2018/10/10 PHP
php pdo连接数据库操作示例
2019/11/18 PHP
Jquery插件编写简明教程
2014/03/25 Javascript
jquery鼠标放上去显示悬浮层即弹出定位的div层
2014/04/25 Javascript
jquery操作checkbox实现全选和取消全选
2014/05/02 Javascript
跟我学Nodejs(二)--- Node.js事件模块
2014/05/21 NodeJs
深入理解JavaScript系列(30):设计模式之外观模式详解
2015/03/03 Javascript
javascript每日必学之封装
2016/02/23 Javascript
javascript 数组去重复(在线去重工具)
2016/12/17 Javascript
微信小程序 同步请求授权的详解
2017/08/04 Javascript
vue 实现类似淘宝星级评分的示例
2018/03/01 Javascript
Vue props 单向数据流的实现
2018/11/06 Javascript
监听angularJs列表数据是否渲染完毕的方法示例
2018/11/07 Javascript
Vue.js组件高级特性实例详解
2018/12/24 Javascript
vuejs+element UI table表格中实现禁用部分复选框的方法
2019/09/20 Javascript
JS实现点击下拉列表文本框中出现对应的网址,点击跳转按钮实现跳转
2019/11/25 Javascript
python使用requests模块实现爬取电影天堂最新电影信息
2019/04/03 Python
Python实现代码块儿折叠
2020/04/15 Python
苏格兰在线威士忌商店:The Whisky Barrel
2019/05/07 全球购物
Linux管理员面试题 Linux admin interview questions
2016/07/08 面试题
Shell脚本如何向终端输出信息
2014/04/25 面试题
黄继光的英雄事迹材料
2014/02/13 职场文书
运动员口号
2014/06/09 职场文书
副总经理岗位职责范本
2014/09/30 职场文书
同意迁入证明模板
2014/10/26 职场文书
2014年单位法制宣传日活动总结
2014/11/01 职场文书
2015年教师个人业务工作总结
2015/10/23 职场文书
解决Golang time.Parse和time.Format的时区问题
2021/04/29 Golang
python中的getter与setter你了解吗
2022/03/24 Python
Python开发简易五子棋小游戏
2022/05/02 Python