详解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之yield表达式学习
Sep 02 Python
Python金融数据可视化汇总
Nov 17 Python
matplotlib绘图实例演示标记路径
Jan 23 Python
解决python删除文件的权限错误问题
Apr 24 Python
python判断设备是否联网的方法
Jun 29 Python
Django跨域请求CSRF的方法示例
Nov 11 Python
python中正则表达式与模式匹配
May 07 Python
Python异常模块traceback用法实例分析
Oct 22 Python
解决django无法访问本地static文件(js,css,img)网页里js,cs都加载不了
Apr 07 Python
Python代码中如何读取键盘录入的值
May 27 Python
python向企业微信发送文字和图片消息的示例
Sep 28 Python
scrapy实践之翻页爬取的实现
Jan 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
中国收音机工业发展史
2021/03/02 无线电
PHP 过滤页面中的BOM(实现代码)
2013/06/29 PHP
浅析get与post的一些特殊情况
2014/07/28 PHP
ThinkPHP里用U方法调用js文件实例
2015/06/18 PHP
学习php设计模式 php实现门面模式(Facade)
2015/12/07 PHP
Yii2.0框架实现带分页的多条件搜索功能示例
2019/02/20 PHP
JavaScript面向对象知识串结(读JavaScript高级程序设计(第三版))
2012/07/17 Javascript
jQuery自定义添加"$"与解决"$"冲突的方法
2015/01/19 Javascript
JS组件Bootstrap Select2使用方法解析
2016/05/30 Javascript
BootstrapTable+KnockoutJS自定义T4模板快速生成增删改查页面
2016/08/01 Javascript
AngularJs ng-repeat 嵌套如何获取外层$index
2016/09/21 Javascript
Vue.js第四天学习笔记
2016/12/02 Javascript
Vue2.0 多 Tab切换组件的封装实例
2017/07/28 Javascript
node.js的http.createServer过程深入解析
2019/06/06 Javascript
20个必会的JavaScript面试题(小结)
2019/07/02 Javascript
vue实现节点增删改功能
2019/09/26 Javascript
浅谈如何优雅处理JavaScript异步错误
2019/11/12 Javascript
Python获取远程文件大小的函数代码分享
2014/05/13 Python
浅谈Python实现贪心算法与活动安排问题
2017/12/19 Python
Python使用pyautogui模块实现自动化鼠标和键盘操作示例
2018/09/04 Python
python 实现图片旋转 上下左右 180度旋转的示例
2019/01/24 Python
使用python实现unix2dos和dos2unix命令的例子
2019/08/13 Python
DJango的创建和使用详解(默认数据库sqlite3)
2019/11/18 Python
DRF使用simple JWT身份验证的实现
2021/01/14 Python
印度在线购物网站:Paytmmall
2019/07/24 全球购物
英国时尚泳装品牌:Maru Swimwear
2019/10/06 全球购物
护士试用期自我鉴定
2014/02/08 职场文书
老人祝寿主持词
2014/03/28 职场文书
考核评语大全
2014/04/29 职场文书
酒店管理专业自荐信
2014/05/23 职场文书
语文教研活动总结
2014/07/02 职场文书
离婚协议书范本样本
2014/08/19 职场文书
幼儿园家长反馈意见
2015/06/03 职场文书
单位工作证明范本
2015/06/15 职场文书
网络研修心得体会
2016/01/08 职场文书
2016年社区中秋节活动总结
2016/04/05 职场文书