详解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 相关文章推荐
windows下python模拟鼠标点击和键盘输示例
Feb 28 Python
Python深入学习之特殊方法与多范式
Aug 31 Python
python中的字典详细介绍
Sep 18 Python
浅谈Python中copy()方法的使用
May 21 Python
python在ubuntu中的几种安装方法(小结)
Dec 08 Python
numpy中实现ndarray数组返回符合特定条件的索引方法
Apr 17 Python
Django添加favicon.ico图标的示例代码
Aug 07 Python
python requests 库请求带有文件参数的接口实例
Jan 03 Python
Python 处理文件的几种方式
Aug 23 Python
18个Python脚本可加速你的编码速度(提示和技巧)
Oct 17 Python
如何用 Python 子进程关闭 Excel 自动化中的弹窗
May 07 Python
JAVA SpringMVC实现自定义拦截器
Mar 16 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实现文件安全下载
2006/10/09 PHP
php smarty截取中文字符乱码问题?gb2312/utf-8
2011/11/07 PHP
Laravel源码解析之路由的使用和示例详解
2018/09/27 PHP
php时间戳转换代码详解
2019/08/04 PHP
ExtJS 2.0实用简明教程之应用ExtJS
2009/04/29 Javascript
基于JQUERY的多级联动代码
2012/01/24 Javascript
js获取select选中的option的text示例代码
2013/12/19 Javascript
JavaScript实现简单的数字倒计时
2015/05/15 Javascript
JS实现的3D拖拽翻页效果代码
2015/10/31 Javascript
对象转换为原始值的实现方法
2016/06/06 Javascript
jQuery仿京东商城楼梯式导航定位菜单
2016/07/25 Javascript
javascript实现table单元格点击展开隐藏效果(实例代码)
2017/04/10 Javascript
ionic 自定义弹框效果
2017/06/27 Javascript
Vue.js中extend选项和delimiters选项的比较
2017/07/17 Javascript
详解用vue2.x版本+adminLTE开源框架搭建后台应用模版
2019/03/15 Javascript
百度小程序自定义通用toast组件
2019/07/17 Javascript
如何修改Vue打包后文件的接口地址配置的方法
2020/04/22 Javascript
解决vuex数据页面刷新后初始化操作
2020/07/26 Javascript
Windows下安装python MySQLdb遇到的问题及解决方法
2017/03/16 Python
python中requests使用代理proxies方法介绍
2017/10/25 Python
python 反向输出字符串的方法
2018/07/16 Python
10 分钟快速入门 Python3的教程
2019/01/29 Python
详解Python3中ceil()函数用法
2019/02/19 Python
如何实现在jupyter notebook中播放视频(不停地展示图片)
2020/04/23 Python
python中spy++的使用超详细教程
2021/01/29 Python
英国拳击装备购物网站:RDX Sports
2018/01/23 全球购物
Travelstart沙特阿拉伯:廉价航班、豪华酒店和实惠的汽车租赁优惠
2019/04/06 全球购物
标准导师推荐信(医学类)
2013/10/28 职场文书
博士生入学考试推荐信
2013/11/17 职场文书
高职教师岗位职责
2013/12/24 职场文书
淘宝客服专员岗位职责
2014/04/11 职场文书
外贸业务员求职信
2014/06/16 职场文书
坚守艰苦奋斗精神坚决反对享乐主义整改措施
2014/09/17 职场文书
上诉状格式
2015/05/23 职场文书
员工担保书范本
2015/09/22 职场文书
团支部书记竞选稿
2015/11/21 职场文书