Notepad++ 无法直接弹出 Matplotlib 图形窗口,因默认 agg 后端不支持 GUI,需显式设置 MPLBACKEND 环境变量(如 Qt5Agg)并确保对应依赖(PyQt5 或 tkinter)已安装,且 matplotlib.use() 必须在 import pyplot 前调用。

Notepad++ 本身不支持直接弹出 Matplotlib 图形窗口,必须靠外部命令调用 Python 解释器 + 正确配置 GUI 后端才能实现。 默认的 cmd /k python "$(FULL_CURRENT_PATH)" 方式只能输出文本、报错或卡死——因为 Matplotlib 在无 GUI 环境下会 fallback 到 agg 后端,不显示窗口。
为什么 plt.show() 在 Notepad++ 里没反应?
常见错误现象:plt.show() 执行后命令行窗口一闪而过,或卡住不动,或报 TclError: no display name and no $DISPLAY environment variable(Linux 风格错误,Windows 上表现为静默失败)。
根本原因:Matplotlib 默认后端是 agg(纯图像渲染,无 GUI),而 plt.show() 要弹窗,必须启用支持 GUI 的后端,比如 Qt5Agg、TkAgg 或 WebAgg。Notepad++ 调用的是 cmd 子进程,它不继承桌面会话的 GUI 权限,也不自动加载 Qt/Tk 库路径。
实操建议:
立即学习“Python免费学习笔记(深入)”;
- 在 Python 脚本开头显式指定后端:
import matplotlib; matplotlib.use('Qt5Agg')(必须在import matplotlib.pyplot之前) - 确保已安装对应后端依赖:
pip install PyQt5(配Qt5Agg)或pip install tk(配TkAgg;Python 官方安装包通常自带tk,但精简版可能缺失) - 不要依赖
%matplotlib qt5这类 IPython 魔法命令——Notepad++ 不是 Jupyter,不识别魔法命令
Notepad++ 运行含 plt.show() 的脚本:正确命令写法
原命令 cmd /k python "$(FULL_CURRENT_PATH)" & PAUSE & EXIT 有两大隐患:一是未设置环境变量让 Matplotlib 选对后端,二是 Windows 下子进程 GUI 权限受限,容易被系统拦截。
推荐改用以下命令(粘贴进 Notepad++ 的 Run → Run… 对话框):
cmd /k set MPLBACKEND=Qt5Agg & python "$(FULL_CURRENT_PATH)" & PAUSE & EXIT
说明与要点:
-
set MPLBACKEND=Qt5Agg是关键:它强制 Matplotlib 使用 Qt5 后端,绕过自动探测逻辑 - 注意
&是 cmd 中的命令分隔符(不是 &),需转义为&才能在 Notepad++ 中正确解析 - 如果用
TkAgg,把Qt5Agg换成TkAgg即可,但需确认tkinter可用(测试:在 Python 中执行import tkinter; tkinter.Tk()不报错) - 若仍弹窗失败,尝试加
start ""前缀:cmd /k start "" cmd /k set MPLBACKEND=Qt5Agg & python "$(FULL_CURRENT_PATH)"(启动新独立进程,提升 GUI 权限)
Notepad++ + Matplotlib 绘图调试的实用技巧
绘图脚本在 Notepad++ 中反复运行时,容易遇到:窗口重复弹出、旧图未关闭、内存泄漏、或 plt.show() 阻塞后续代码执行。
避免这些问题的实操建议:
- 每次绘图前加
plt.close('all'),清空所有 Figure,防止窗口堆积 - 不用
plt.show(block=False)试图“非阻塞”——在 cmd 环境下不可靠;如需继续执行后续代码,改用plt.draw(); plt.pause(0.001) - 若只需查看图像而不交互,用
plt.savefig('output.png')+ 手动打开文件更稳定 - Notepad++ 的 NppExec 插件比原生 Run 更可控:可配置执行后自动聚焦到输出面板,并支持变量如
$(CURRENT_DIRECTORY),避免路径空格问题
真正卡住的地方往往不是语法或路径,而是后端选择和 GUI 进程权限。Matplotlib 弹窗失败,90% 是后端没设对,剩下 10% 是 Qt/Tk DLL 没加载进来——别急着重装 Python,先检查 import PyQt5 或 import tkinter 是否成功。


















