详解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 这5本书籍你必看!
Dec 11 Python
Python中时间datetime的处理与转换用法总结
Feb 18 Python
详解Python计算机视觉 图像扭曲(仿射扭曲)
Mar 27 Python
windows中安装Python3.8.0的实现方法
Nov 19 Python
pandas实现将日期转换成timestamp
Dec 07 Python
TensorBoard 计算图的查看方式
Feb 15 Python
tensorflow之tf.record实现存浮点数数组
Feb 17 Python
Python3创建Django项目的几种方法(3种)
Jun 03 Python
在python中使用pyspark读写Hive数据操作
Jun 06 Python
PyCharm 2020.1版安装破解注册码永久激活(激活到2089年)
Sep 24 Python
Python中非常使用的6种基本变量的操作与技巧
Mar 22 Python
Python+OpenCV实现图片中的圆形检测
Apr 07 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
使用bcompiler对PHP文件进行加密的代码
2010/08/29 PHP
PHP CURL获取返回值的方法
2014/05/04 PHP
php 参数过滤、数据过滤详解
2015/10/26 PHP
PHP递归的三种常用方式
2019/02/28 PHP
thinkphp5.1框架模板赋值与变量输出示例
2020/05/25 PHP
javascript动态加载二
2012/08/22 Javascript
javascript和jquery实现设置和移除文本框默认值效果代码
2015/01/13 Javascript
jQuery中$this和$(this)的区别介绍(一看就懂)
2015/07/06 Javascript
深入学习jQuery中的data()
2016/12/22 Javascript
微信小程序 sha1 实现密码加密实例详解
2017/07/06 Javascript
js 客户端打印html 并且去掉页眉、页脚的实例
2017/11/03 Javascript
vue组件watch属性实例讲解
2017/11/07 Javascript
css和js实现弹出登录居中界面完整代码
2017/11/26 Javascript
JS实现点击拉拽轮播图pc端移动端适配
2018/09/05 Javascript
JS如何获取地址栏的参数实例讲解
2018/10/06 Javascript
详解JavaScript中typeof与instanceof用法
2018/10/24 Javascript
angular学习之动态创建表单的方法
2018/12/07 Javascript
AngularJS实现的自定义过滤器简单示例
2019/02/02 Javascript
JavaScript使用面向对象实现的拖拽功能详解
2019/06/12 Javascript
python相似模块用例
2016/03/04 Python
python实现屏保计时器的示例代码
2018/08/08 Python
python线程的几种创建方式详解
2019/08/29 Python
关于初始种子自动选取的区域生长实例(python+opencv)
2020/01/16 Python
python3.6中anaconda安装sklearn踩坑实录
2020/07/28 Python
python搜索算法原理及实例讲解
2020/11/18 Python
html5用video标签流式加载的实现
2020/05/20 HTML / CSS
恐龙的灭绝教学反思
2014/02/12 职场文书
竞选学生会主席演讲稿
2014/04/24 职场文书
政府班子四风问题整改措施
2014/10/04 职场文书
2015年党员发展工作总结
2015/05/13 职场文书
JS数组的常用方法整理
2021/03/31 Javascript
使用Html+Css实现简易导航栏功能(导航栏遇到鼠标切换背景颜色)
2021/04/07 HTML / CSS
Python编写可视化界面的全过程(Python+PyCharm+PyQt)
2021/05/17 Python
浅谈TypeScript 索引签名的理解
2021/10/16 Javascript
详解Spring Security中的HttpBasic登录验证模式
2022/03/17 Java/Android
详解Alibaba Java诊断工具Arthas查看Dubbo动态代理类
2022/04/08 Java/Android