matplotlib更改窗口图标的方法示例


Posted in Python onFebruary 03, 2021

matplotlib窗口图标默认是matplotlib的标志,如果想修改怎么改呢?

由于我选择的matplotlib后端是PyQT5,直接查看matplotlib.backends.backend_qt5模块源码。

原理

查看源码可知,窗口图标功能定义在FigureManagerQT类中,设置的默认图标是mpl-data\images\matplotlib.svg。
FigureManagerQT的父类是FigureManagerBase,其功能是作为容器隔离matplotlib图像和后端实现的窗口,并与窗口进行交互,它会自动适配matplotlib选用的后端。
这样只用找到当前图像中FigureManagerQT类的实例(即当前图像的图像管理器)后调用setWindowIcon方法即可完成窗口图标的更改。
获取当前图像的图像管理器有两种写法,因此,更改窗口图标的实现有两种。
根据matplotlib.pyplot.get_current_fig_manager()函数源码可知这两种方法是等价的。

实现代码

import matplotlib.pyplot as plt
from PyQt5 import QtGui

plt.plot([1,2])
# 构建图标
PATH_TO_ICON = r"c:\quit.png"
new_icon = QtGui.QIcon(PATH_TO_ICON)
# 方法一:使用figure.canvas.manager获取当前图像的`FigureManagerQT`类实例
fig =plt.gcf()
fig.canvas.manager.window.setWindowIcon(QtGui.QIcon(new_icon))

# 方法二:使用plt.get_current_fig_manager()获取当前图像的`FigureManagerQT`类实例
plt.get_current_fig_manager().window.setWindowIcon(new_icon)
plt.show()

matplotlib源码

class FigureManagerQT(FigureManagerBase):
  """
  Attributes
  ----------
  canvas : `FigureCanvas`
    The FigureCanvas instance
  num : int or str
    The Figure number
  toolbar : qt.QToolBar
    The qt.QToolBar
  window : qt.QMainWindow
    The qt.QMainWindow
  """

  def __init__(self, canvas, num):
    FigureManagerBase.__init__(self, canvas, num)
    self.window = MainWindow()
    self.window.closing.connect(canvas.close_event)
    self.window.closing.connect(self._widgetclosed)

    self.window.setWindowTitle("Figure %d" % num)
    image = str(cbook._get_data_path('images/matplotlib.svg'))
    self.window.setWindowIcon(QtGui.QIcon(image))
def get_current_fig_manager():
  return gcf().canvas.manager

到此这篇关于matplotlib更改窗口图标的方法示例的文章就介绍到这了,更多相关matplotlib更改窗口图标内容请搜索三水点靠木以前的文章或继续浏览下面的相关文章希望大家以后多多支持三水点靠木!

Python 相关文章推荐
写了个监控nginx进程的Python脚本
May 10 Python
easy_install python包安装管理工具介绍
Feb 10 Python
python三元运算符实现方法
Dec 17 Python
和孩子一起学习python之变量命名规则
May 27 Python
Python线程同步的实现代码
Oct 03 Python
python实现大量图片重命名
Mar 23 Python
Python TCP通信客户端服务端代码实例
Nov 21 Python
python 实现快速生成连续、随机字母列表
Nov 28 Python
浅谈tensorflow 中tf.concat()的使用
Feb 07 Python
Python实现文件压缩和解压的示例代码
Aug 12 Python
如何设置PyCharm中的Python代码模版(推荐)
Nov 20 Python
python热力图实现简单方法
Jan 29 Python
python中添加模块导入路径的方法
Feb 03 #Python
浅谈matplotlib默认字体设置探索
Feb 03 #Python
python sleep和wait对比总结
Feb 03 #Python
Python实现简单猜数字游戏
Feb 03 #Python
python 实现图片裁剪小工具
Feb 02 #Python
python向xls写入数据(包括合并,边框,对齐,列宽)
Feb 02 #Python
Python datetime模块的使用示例
Feb 02 #Python
You might like
PHP魔术方法__GET、__SET使用实例
2014/11/25 PHP
ThinkPHP中Session用法详解
2014/11/29 PHP
jQuery Mobile + PHP实现文件上传
2014/12/12 PHP
php原生导出excel文件的两种方法(推荐)
2016/11/19 PHP
php抽象方法和抽象类实例分析
2016/12/07 PHP
Laravel Eloquent ORM 实现查询表中指定的字段
2019/10/17 PHP
CLASS_CONFUSION JS混淆 全源码
2007/12/12 Javascript
javascript克隆对象深度介绍
2012/11/20 Javascript
javascript检测是否联网的实现代码
2014/09/28 Javascript
使用javascript实现判断当前浏览器
2015/04/14 Javascript
Angular实现form自动布局
2016/01/28 Javascript
Jquery轮播效果实现过程解析
2016/03/30 Javascript
JS实现表单验证功能(验证手机号是否存在,验证码倒计时)
2016/10/11 Javascript
浅谈函数调用的不同方式,以及this的指向
2017/09/17 Javascript
深入理解Angular4订阅(Subscribe)与取消
2017/11/22 Javascript
小程序实现带年月选取效果的日历
2018/06/27 Javascript
基于vue中keep-alive缓存问题的解决方法
2018/09/21 Javascript
JavaScript原型对象原理与应用分析
2018/12/27 Javascript
vue elementui 实现搜索栏公共组件封装的实例代码
2020/01/20 Javascript
[02:51]DOTA2英雄基础教程 风暴之灵
2013/12/23 DOTA
MySQLdb ImportError: libmysqlclient.so.18解决方法
2014/08/21 Python
python3实现磁盘空间监控
2018/06/21 Python
Python使用正则表达式分割字符串的实现方法
2019/07/16 Python
numpy实现神经网络反向传播算法的步骤
2019/12/24 Python
详解python程序中的多任务
2020/09/16 Python
耐克中国官方商城:Nike中国
2018/10/18 全球购物
JSP和EJB可以共享HttpSession么?EJB里面可以改变session里面的内容
2013/06/05 面试题
行政前台岗位职责
2013/12/04 职场文书
优秀员工评语
2014/02/10 职场文书
建筑投标担保书
2014/05/20 职场文书
财务会计实训报告
2014/11/05 职场文书
入伍志愿书怎么写?
2019/07/19 职场文书
学习师德师风的心得体会(2篇)
2019/10/08 职场文书
学习nginx基础知识
2021/09/04 Servers
python基础之类方法和静态方法
2021/10/24 Python
动画电影《擅长捉弄人的高木同学》6月10日上映!
2022/03/20 日漫