详解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实现2014火车票查询代码分享
Jan 10 Python
Python利用多进程将大量数据放入有限内存的教程
Apr 01 Python
python用pickle模块实现“增删改查”的简易功能
Jun 07 Python
python dataframe astype 字段类型转换方法
Apr 11 Python
JavaScript实现一维数组转化为二维数组
Apr 17 Python
Python设计模式之代理模式实例详解
Jan 19 Python
python障碍式期权定价公式
Jul 19 Python
python使用tomorrow实现多线程的例子
Jul 20 Python
基于python-pptx库中文文档及使用详解
Feb 14 Python
python中urllib.request和requests的使用及区别详解
May 05 Python
Python3 webservice接口测试代码详解
Jun 23 Python
Python实现Word文档转换Markdown的示例
Dec 22 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判断文件夹是否存在不存在则创建
2015/04/09 PHP
php简单解析mysqli查询结果的方法(2种方法)
2016/06/29 PHP
一文看懂PHP进程管理器php-fpm
2020/06/01 PHP
xtree.js 代码
2007/03/13 Javascript
IE8 下的Js错误HTML Parsing Error...
2009/08/14 Javascript
YUI的Tab切换实现代码
2010/04/11 Javascript
Asp.net下利用Jquery Ajax实现用户注册检测(验证用户名是否存)
2010/09/12 Javascript
jQuery使用数组编写图片无缝向左滚动
2012/12/11 Javascript
一个判断抢购时间是否到达的简单的js函数
2014/06/23 Javascript
js的回调函数详解
2015/01/05 Javascript
JS中prototype的用法实例分析
2015/03/19 Javascript
js实现3D图片逐张轮播幻灯片特效代码分享
2015/09/09 Javascript
JavaScript数组去重由慢到快由繁到简(优化篇)
2016/08/26 Javascript
Angular的$http的ajax的请求操作(推荐)
2017/01/10 Javascript
webpack入门必知必会
2017/01/16 Javascript
JavaScript数组操作详解
2017/02/04 Javascript
详解基于Node.js的微信JS-SDK后端接口实现代码
2017/07/15 Javascript
NodeJs实现定时任务的示例代码
2017/12/05 NodeJs
浅谈在node.js进入文件目录的问题
2018/05/13 Javascript
Vue实现根据hash高亮选项卡
2019/05/27 Javascript
快速解决layui弹窗按enter键不停弹窗的问题
2019/09/18 Javascript
layui动态渲染生成左侧3级菜单的方法(根据后台返回数据)
2019/09/23 Javascript
[01:19]DOTA2城市挑战赛报名开始 开启你的城市传奇
2018/03/23 DOTA
[02:49]DAC2018决赛日TOP5 LGD开启黑暗之门绝杀VP
2018/04/08 DOTA
python中正则表达式的使用详解
2014/10/17 Python
python获取从命令行输入数字的方法
2015/04/29 Python
Python爬取商家联系电话以及各种数据的方法
2018/11/10 Python
python如何爬取网站数据并进行数据可视化
2019/07/08 Python
使用Python调取任意数字资产钱包余额功能
2019/08/15 Python
Python3合并两个有序数组代码实例
2020/08/11 Python
Html5新标签datalist实现输入框与后台数据库数据的动态匹配
2017/05/18 HTML / CSS
OSPREY LONDON官网:英国本土皮具品牌
2019/05/31 全球购物
PyQt 如何创建自定义QWidget
2021/03/24 Python
咨询公司各岗位职责
2013/12/02 职场文书
结婚十年感言
2015/07/31 职场文书
手术室消毒隔离制度
2015/08/05 职场文书