更新2020.06.29
fix : vscode 调试python时,每次打开一个新的terminal需要频繁执行 export
为了方便使用,可以利用python的os模块,把脚本放在前面执行。在__main__脚本前面加上export DISPLAY=:0.0
## mian.py
import os
import matplotlib.plt as plt
## linux 下,给 $DISPLAY 分配一个变量,以防窗口无法弹出
if __name__ == "__main__":
os.system('export DISPLAY=:0.0')
x = [0,1]
plt.plot(x)
print('test matplot')
shell 中检查
echo $DISPLAY
如果显示为空,说明当前窗口没有获得 $DISPLAY 环境变量 导致无法画图。
解决方案:在shell中运行以下脚本给变量赋值即可。
export DISPLAY=:0.0
一般情况下不会报错,所以难以排查问题所在。实际上,之前使用vscode开发python时,一直遇到matplotlib模块不画图现象。编译器并不报错,debug完全通过,就是不显示图像。然而,在shell中直接运行py脚本却可以画图!一直没有搞清原因。直到尝试用vscode写python-tkinter时,又遇到此问题。不过这次终于给了个错误:
_tkinter.TclError: no display name and no $DISPLAY environment variable
终于定位到了问题。本质上是vscode的terminal没有获取到$DISPLAY环境变量,所以无法画图,需要手动给他分配一个。