使用matplotlib绘图时,通常利用matplotlib.pyplot模块的show函数(即常用的plt.show())显示绘图结果,显示的方式是通过后端创建窗口容纳绘图图像,matplotlib支持多种后端,各种后端的实现有所差异,因此matplotlib绘图窗口的状态管理与后端的具体实现息息相关。
在此以PyQT5后端为例,简要演示matplotlib窗口状态切换。
原理
查看源码可知,与matplotlib窗口状态相关源码定义在matplotlib.backends.backend_qt5模块的FigureManagerQT类当中,与窗口状态相关的方法实现均依赖于window属性(即figure.canvas.manager.window),而window属性是PyQT5中QMainWindow类的实例。
在matplotlib中,仅定义了全屏切换full_screen_toggle()方法的实现,未定义窗口最大化、最小化、置顶等实现,根据PyQT5相关知识,窗口状态切换的重要定义如下:
- 窗口全屏
figure .canvas.manager.window.showFullScreen() - 窗口最大化
figure .canvas.manager.window.showMaximized() - 窗口最小化
figure .canvas.manager.window.showMinimized() - 窗口正常状态
figure .canvas.manager.window.showNormal() - 窗口置顶
fig.canvas.manager.window.setWindowFlags(QtCore.Qt.WindowStaysOnTopHint) - 自定义窗口控制按钮(仅显示关闭按钮)
fig.canvas.manager.window.setWindowFlags(QtCore.Qt.CustomizeWindowHint | QtCore.Qt.WindowCloseButtonHint)
在窗口置顶和控制按钮实现中,需要使用setWindowFlags方法,其参数为WindowType,在QT中为枚举类型(enum),具体取值参考https://www.riverbankcomputing.com/static/Docs/PyQt5/api/qtcore/qt.html#WindowType。
案例
功能:以工具栏工具按钮形式调用窗口状态管理方法。

from matplotlib.backend_tools import ToolBase, ToolToggleBase
import matplotlib.pyplot as plt
from PyQt5 import QtCore
plt.rcParams['toolbar'] = 'toolmanager'
class showMax(ToolToggleBase):
description = '最大化切换'
def enable(self, *args, **kwargs):
fig

本文介绍如何使用Matplotlib结合PyQT5实现图形界面窗口状态管理,包括最大化、最小化、全屏显示、置顶及自定义窗口控制按钮等功能。
最低0.47元/天 解锁文章

被折叠的 条评论
为什么被折叠?



