不能';在python中使用tcl库时,无法连接到显示错误

不能';在python中使用tcl库时,无法连接到显示错误,python,tkinter,tcl,Python,Tkinter,Tcl,我试图在linux服务器上用python调用hello world tcl脚本,但它会生成\u tkinter.TclError:无法连接到display错误 错误如下: r = Tkinter.Tk() File "/apps/cad/default/python2.7/lib/python2.7/lib-tk/Tkinter.py", line 1764, in __init__ self.tk = _tkinter.create(screenName, baseName, classN

我试图在linux服务器上用python调用hello world tcl脚本,但它会生成
\u tkinter.TclError:无法连接到display
错误

错误如下:

r = Tkinter.Tk()
File "/apps/cad/default/python2.7/lib/python2.7/lib-tk/Tkinter.py", line 1764, in __init__
  self.tk = _tkinter.create(screenName, baseName, className, interactive, wantobjects, useTk, sync, use)"
_tkinter.TclError: couldn't connect to display 
我已经搜索过这个问题,但大多数解决方案都是在
matplotlib.use()
中使用
Agg
,但我尝试了,结果无效

test.py

import Tkinter

r = Tkinter.Tk()

r.tk.eval("source test.tcl")
test.tcl

puts "hello py"
是什么导致了这个问题,我将如何解决这个问题?谢谢大家!

Tk,因此Tkinter,需要Linux上的X服务器(通常称为“显示器”),以便它可以在上面弹出窗口。因为这是它的主要目的;画窗户。(如何连接到X服务器在
DISPLAY
环境变量中进行了说明。)

服务器通常没有显示器。如果需要,可以使用Xvfb程序(创建虚拟帧缓冲区、合成显示),只要不需要与脚本创建的窗口交互,该程序就可以正常工作。如果您确实需要与窗口交互,您必须找到一种方法使它们显示在其他地方。这可能是通过ssh使用X转发,或者某种方式使用VNC连接,或者……嗯,有很多选择。如果要在服务器上运行,建议不要编写需要用户交互的代码。这是可以做到的,但这是非常棘手的,应该避免在不必要的地方


您需要仔细阅读Xvfb,看看如何启动它和Python代码,使它们能够找到彼此。

您是在有显示器的机器上运行它的吗?如果您在服务器上运行它,您可能没有显示器。Tkinter需要一个display.BTW,我已经为matplotlib提供了一个特定的解决方案,它比通常的在线建议效果更好;matplotlib的解决方法特别棘手和笨拙,因为有些部分完全没有文档记录,但有一种方法可以在不安装X服务器的情况下强制执行操作。我下面的答案是针对一个更普遍的问题,在这个问题上,首先是无法避免的。