详解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 查找文件夹下所有文件 实现代码
Jul 01 Python
python修改操作系统时间的方法
May 18 Python
常见python正则用法的简单实例
Jun 21 Python
由浅入深讲解python中的yield与generator
Apr 05 Python
在python中pandas的series合并方法
Nov 12 Python
python判断列表的连续数字范围并分块的方法
Nov 16 Python
一文带你了解Python中的字符串是什么
Nov 20 Python
python pip源配置,pip配置文件存放位置的方法
Jul 12 Python
python实现将文件夹内的每张图片批量分割成多张
Jul 22 Python
python3反转字符串的3种方法(小结)
Nov 07 Python
基于python实现音乐播放器代码实例
Jul 01 Python
再也不用花钱买漫画!Python爬取某漫画的脚本及源码
Jun 09 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 面试碰到过的问题 在此做下记录
2011/06/09 PHP
Yii使用CLinkPager分页实例详解
2014/07/23 PHP
PHP连接access数据库
2015/03/27 PHP
php使用Imagick生成图片的方法
2015/07/31 PHP
PHP结合jQuery插件ajaxFileUpload实现异步上传文件实例
2020/08/17 PHP
Laravel配合jwt使用的方法实例
2020/10/25 PHP
IE/FireFox具备兼容性的拖动代码
2007/08/13 Javascript
FileUpload 控件 禁止手动输入或粘贴的实现代码
2010/04/07 Javascript
JavaScript中的函数的两种定义方式和函数变量赋值
2014/05/12 Javascript
JavaScript提高性能知识点汇总
2016/01/15 Javascript
巧方法 JavaScript获取超链接的绝对URL地址
2016/06/14 Javascript
vue devtools的安装与使用教程
2018/08/08 Javascript
深入理解JavaScript 中的执行上下文和执行栈
2018/10/23 Javascript
详解如何使用router-link对象方式传递参数?
2019/05/02 Javascript
node.js实现http服务器与浏览器之间的内容缓存操作示例
2020/02/11 Javascript
通过实例了解Nodejs模块系统及require机制
2020/07/16 NodeJs
使用Vue-scroller页面input框不能触发滑动的问题及解决方法
2020/08/08 Javascript
JavaScript实现随机点名小程序
2020/10/29 Javascript
python抓取并保存html页面时乱码问题的解决方法
2016/07/01 Python
python实现在cmd窗口显示彩色文字
2019/06/24 Python
pyautogui自动化控制鼠标和键盘操作的步骤
2020/04/01 Python
tensorflow2.0的函数签名与图结构(推荐)
2020/04/28 Python
如何基于Django实现上下文章跳转
2020/09/16 Python
Opencv+Python识别PCB板图片的步骤
2021/01/07 Python
伊利莎白雅顿官网:Elizabeth Arden
2016/10/10 全球购物
叙述DBMS对数据控制功能有哪些
2016/06/12 面试题
学生自我鉴定
2013/12/18 职场文书
跟单业务员岗位职责
2014/03/08 职场文书
迎国庆演讲稿
2014/09/15 职场文书
平安建设汇报材料
2014/12/29 职场文书
公司介绍信范文
2015/01/31 职场文书
搞笑老公保证书
2015/02/26 职场文书
会计岗位职责范本
2015/04/02 职场文书
《珍珠鸟》教学反思
2016/02/16 职场文书
《给予树》教学反思
2016/03/03 职场文书
Windows11插耳机没反应怎么办? win11耳机没声音的多种解决办法
2021/11/21 数码科技