解决_tkinter.TclError: no display name and no $DISPLAY environment variable问题

101 篇文章 5 订阅
39 篇文章 1 订阅

这几天在容器内部署了一个数据实时预处理+模型计算的服务,在物理机的图形界面下运行正常,但涉及到matplotlib的pyplot,放到纯命令行的容器里却报错了(如题),网上也查到了问题原因,并不是因为没装python3-tk和tk-dev,而是因为matplotlib的backend设置不当造成的。

1、Backend

matplotlib面向不同的用例和输出格式。有的是通过python的命令行交互式地使用matplotlib,并在输入命令时弹出绘图窗口。有的是将matplotlib嵌入到诸如wxpython、pygtk等图形用户截面中来构建丰富的应用程序。有的是在批处理脚本中使用matplotlib从一些数值模拟中生成postscript图像以及web应用服务动态生成图像。

为了支持所有这些用例,matplotlib可以面向不同的输出,每一种都称为后端“backend”。backend在幕后做所有的制作图形的工作。后端分为交互式和非交互式两种。交互式用于pygtk、wxpython、tkinter、qt4或macosx,也称为用户界面后端。非交互式是指PNG、SVG、PDF、PS等,也称为硬拷贝后端。

2、backend的四种设置方式:

(1)直接在matplotlibrc文件中对backend进行配置,改文件位于:

在这里插入图片描述
位置可能有差异,大家要自己找!改为下面这个样子,原来是tkAgg。
在这里插入图片描述

(2)针对某一特定脚本,可以使用use()函数
import matplotlib
matplotlib.use('Agg')

需要注意的是:use()函数要在在导入matplotlib.pyplot之前使用,否则use函数无效。

(3)执行脚本时加一个参数
python3 test.py -dbackend Agg

使用时要注意-d参数与其他解析命令行参数的冲突问题。

(4)为当前shell或脚本设置MPLBACKEND环境变量
export MPLBACKEND=Agg
MPLBACKEND=Agg python test.py

以上几种方法大家根据需要选择,像在容器内部使用的话,还是选择第一种合适,一劳永逸!

参考文献:

1、_tkinter.TclError: no display name and no $DISPLAY environment variable解决办法
2、Linux命令行使用matplotlib,报错_tkinter.TclError: no display name and no $DISPLAY environment variable问题解决

  • 9
    点赞
  • 13
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值