tkinter.TclError:无法连接以显示“localhost:18.0"; [英] tkinter.TclError: couldn't connect to display "localhost:18.0"

查看:60
本文介绍了tkinter.TclError:无法连接以显示“localhost:18.0";的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

我试图在中央服务器上运行一个模拟(用 python 编写),当模拟完成时,通过连接到我的本地 PC,将保存的图形文件/保存的数据文件移动到我的本地 PC.代码如下:

I was trying to run a simulation (written in python) in the central server, and when simulation is finished, move saved figure file / saved data file to my local PC, by connecting to my local PC. Code is as following:

import matplotlib.pyplot as plt
import subprocess
import scipy.io
import os

#Save data file:
scipy.io.savemat(data_path + Filename_str, dict(A=board))

#Create / Save figure by using imshow (Heatmap)
p = plt.imshow(mean_map.T, cmap = plt.cm.gist_yarg_r, origin = 'lower',  extent = [0, phi, 0, Z], aspect='auto')
plt.savefig(figure_path + Filename_str + '-Homophily.pdf')

# Connect to my local host (arabian-knights) using ssh, and follow command.
ret = subprocess.call(['ssh', 'arabian-knights', 'mv Data/* /scratch/Data/'])
ret = subprocess.call(['ssh', 'arabian-knights', 'mv Figure/* /scratch/Figure/'])

从本地计算机(arabian-knights)连接到服务器计算机后,我在服务器计算机的后台运行此模拟.即使我关闭了与服务器计算机的连接,由于模拟在后台运行,它也不会停止,并且在模拟完成后数据文件会正确移动到我的本地计算机.但是,未保存图形文件(由 matplotlib.pyplot.imshow 生成),显示以下错误消息:

I run this simulation in background of server computer, after connecting to server computer from my local computer (arabian-knights). Even though I turn off connection to server computer, as simulation is running in background, it doesn't stop, and Data files are correctly moved to my local computer after simulation is done. However, Figure files (produced by matplotlib.pyplot.imshow) are not saved, showing following error messsage:

Traceback (most recent call last):
  File "./ThrHomoHeatmap-thrstep.py", line 179, in <module>
    p = plt.imshow(board.T, cmap = plt.cm.gist_yarg_r, vmin=0, vmax=n, origin = 'lower',  extent = [0, phi, 0, Z], aspect='auto')
  File "/usr/lib/pymodules/python2.7/matplotlib/pyplot.py", line 2370, in imshow
    ax = gca()
  File "/usr/lib/pymodules/python2.7/matplotlib/pyplot.py", line 701, in gca
    ax =  gcf().gca(**kwargs)
  File "/usr/lib/pymodules/python2.7/matplotlib/pyplot.py", line 369, in gcf
    return figure()
  File "/usr/lib/pymodules/python2.7/matplotlib/pyplot.py", line 343, in figure
    **kwargs)
  File "/usr/lib/pymodules/python2.7/matplotlib/backends/backend_tkagg.py", line 80, in new_figure_manager
    window = Tk.Tk()
  File "/usr/lib/python2.7/lib-tk/Tkinter.py", line 1688, in __init__
    self.tk = _tkinter.create(screenName, baseName, className, interactive, wantobjects, useTk, sync, use)
_tkinter.TclError: couldn't connect to display "localhost:18.0"

有人可以解决此问题,也可以将matplotlib.pyplot图形文件从服务器移动到本地计算机吗?

Is there anyone who can solve this problem, to move matplotlib.pyplot figure files from server to local computer as well?

推荐答案

问题是您正在使用交互式后端,该后端正在尝试为您创建图形窗口,但由于您断开了 x-server 的连接而失败开始模拟时可用.

The problem is that you are using an interactive backend which is trying to create figure windows for you, which are failing because you have disconnected the x-server that was available when you started the simulations.

将导入更改为

import matplotlib
matplotlib.use('pdf')
import matplotlib.pyplot as plt

这篇关于tkinter.TclError:无法连接以显示“localhost:18.0";的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!

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