_tkinter.TclError: 没有显示名称和 $DISPLAY 环境变量 [英] _tkinter.TclError: no display name and no $DISPLAY environment variable

查看:44
本文介绍了_tkinter.TclError: 没有显示名称和 $DISPLAY 环境变量的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

我正在服务器中运行一个简单的 python 脚本:

I am running a simple python script in the server:

import matplotlib.pyplot as plt
import numpy as np

x = np.random.randn(60)
y = np.random.randn(60)

plt.scatter(x, y, s=20)

out_png = 'path/to/store/out_file.png'
plt.savefig(out_png, dpi=150)

我尝试在安装了 matplotlib 1.5.1 的服务器中使用命令 python example.py 它失败并显示错误:

I try to use the command python example.py in this server which has matplotlib 1.5.1 installed it fails with the error:

Traceback (most recent call last):
  File "example.py", line 7, in <module>
    plt.scatter(x, y, s=20)
  File "/home/USER/.virtualenvs/nnet/lib/python2.7/site-packages/matplotlib/pyplot.py", line 3241, in scatter
    ax = gca()
  File "/home/USER/.virtualenvs/nnet/lib/python2.7/site-packages/matplotlib/pyplot.py", line 928, in gca
    return gcf().gca(**kwargs)
  File "/home/USER/.virtualenvs/nnet/lib/python2.7/site-packages/matplotlib/pyplot.py", line 578, in gcf
    return figure()
  File "/home/USER/.virtualenvs/nnet/lib/python2.7/site-packages/matplotlib/pyplot.py", line 527, in figure
**kwargs)
  File "/home/USER/.virtualenvs/nnet/lib/python2.7/site-packages/matplotlib/backends/backend_tkagg.py", line 84, in new_figure_manager
    return new_figure_manager_given_figure(num, figure)
  File "/home/USER/.virtualenvs/nnet/lib/python2.7/site-packages/matplotlib/backends/backend_tkagg.py", line 92, in new_figure_manager_given_figure
    window = Tk.Tk()
  File "/usr/local/lib/python2.7/lib-tk/Tkinter.py", line 1810, in __init__
    self.tk = _tkinter.create(screenName, baseName, className, interactive, wantobjects, useTk, sync, use)
_tkinter.TclError: no display name and no $DISPLAY environment variable

这里发生了什么?

推荐答案

Matplotlib 默认选择 Xwindows 后端.您需要将 matplotlib 设置为不使用 Xwindows 后端.

Matplotlib chooses Xwindows backend by default. You need to set matplotlib to not use the Xwindows backend.

将此代码添加到脚本的开头(在导入 pyplot 之前)并重试:

Add this code to the start of your script (before importing pyplot) and try again:

import matplotlib
matplotlib.use('Agg')

或添加到 .config/matplotlib/matplotlibrcbackend: Agg 使用非交互式后端.

Or add to .config/matplotlib/matplotlibrc line backend: Agg to use non-interactive backend.

echo "backend: Agg" > ~/.config/matplotlib/matplotlibrc

或者当连接到服务器时使用 ssh -X remoteMachine 命令来使用 Xwindows.

Or when connect to server use ssh -X remoteMachine command to use Xwindows.

您也可以尝试导出显示:export DISPLAY=mymachine.com:0.0.

Also you may try to export display: export DISPLAY=mymachine.com:0.0.

更多信息:https://matplotlib.org/faq/howto_faq.html#matplotlib-in-a-web-application-server

这篇关于_tkinter.TclError: 没有显示名称和 $DISPLAY 环境变量的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!

查看全文
相关文章
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆