matplotlib更改窗口圖標的方法示例

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更改窗口圖標內容請搜索WalkonNet以前的文章或繼續瀏覽下面的相關文章希望大傢以後多多支持WalkonNet!

推薦閱讀: