详解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使用MD5加密字符串示例
Aug 22 Python
python实现快速排序的示例(二分法思想)
Mar 12 Python
使用matplotlib画散点图的方法
May 25 Python
Python把csv数据写入list和字典类型的变量脚本方法
Jun 15 Python
使用python将时间转换为指定的格式方法
Nov 12 Python
Python异步操作MySQL示例【使用aiomysql】
May 16 Python
Python API 自动化实战详解(纯代码)
Jun 11 Python
python mqtt 客户端的实现代码实例
Sep 25 Python
python下载卫星云图合成gif的方法示例
Feb 18 Python
django 链接多个数据库 并使用原生sql实现
Mar 28 Python
python实现简易名片管理系统
Apr 11 Python
Python加密与解密模块hashlib与hmac
Jun 05 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
15种PHP Encoder的比较
2007/03/06 PHP
PHP伪静态页面函数附使用方法
2008/06/20 PHP
ThinkPHP模板引擎之导入资源文件方法详解
2014/06/18 PHP
PHP常量使用的几个需要注意的地方(谨慎使用PHP中的常量)
2014/09/12 PHP
php mysql获取表字段名称和字段信息的三种方法
2016/11/13 PHP
老生常谈PHP位运算的用途
2017/03/12 PHP
PHP并发查询MySQL的实例代码
2017/08/09 PHP
PHP实现权限管理功能示例
2017/09/22 PHP
通过JS 获取Mouse Position(鼠标坐标)的代码
2009/09/21 Javascript
读jQuery之九 一些瑕疵说明
2011/06/21 Javascript
Jquery实现三层遍历删除功能代码
2013/04/23 Javascript
jq选项卡鼠标延迟的插件实例
2013/05/13 Javascript
JavaScript用Number方法实现string转int
2014/05/13 Javascript
JavaScript中string对象
2015/06/12 Javascript
将页面table内容与样式另存成excel文件的方法
2015/08/05 Javascript
jQuery.Validate表单验证插件的使用示例详解
2017/01/04 Javascript
用最简单的方法判断JavaScript中this的指向(推荐)
2017/09/04 Javascript
使用InstantClick.js让页面提前加载200ms
2017/09/12 Javascript
代码实例ajax实现点击加载更多数据图片
2018/10/12 Javascript
javascript设计模式 ? 原型模式原理与应用实例分析
2020/04/10 Javascript
小程序自定义导航栏兼容适配所有机型(附完整案例)
2020/04/26 Javascript
JavaScript实现移动端弹窗后禁止滚动
2020/05/25 Javascript
javascript的hashCode函数实现代码小结
2020/08/11 Javascript
JavaScript实现瀑布流布局的3种方式
2020/12/27 Javascript
python获取本地计算机名字的方法
2015/04/29 Python
numpy自动生成数组详解
2017/12/15 Python
python调用系统ffmpeg实现视频截图、http发送
2018/03/06 Python
解决pandas中读取中文名称的csv文件报错的问题
2018/07/04 Python
Pytorch中index_select() 函数的实现理解
2019/11/19 Python
Django后端发送小程序微信模板消息示例(服务通知)
2019/12/17 Python
python unichr函数知识点总结
2020/12/16 Python
python连接手机自动搜集蚂蚁森林能量的实现代码
2021/02/24 Python
六五普法规划实施方案
2014/03/21 职场文书
欢迎家长标语
2014/10/08 职场文书
vue选项卡切换的实现案例
2022/04/11 Vue.js
python 镜像环境搭建总结
2022/09/23 Python