首页 > 解决方案 > 在 python 中使用 tcl lib 时无法连接以显示错误

问题描述

我试图在linux服务器上的python中调用一个hello world tcl脚本,但它会产生_tkinter.TclError: couldn't connect to 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 

我已经搜索过这个问题,但大多数解决方案是使用Aggin matplotlib.use(),但我尝试过它并不起作用。

测试.py

import Tkinter

r = Tkinter.Tk()

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

测试.tcl

puts "hello py"

是什么导致了这个问题,我将如何解决这个问题?谢谢!

标签: pythontkintertcl

解决方案


Tk 和 Tkinter需要Linux 上的 X 服务器(通常称为“显示器”),以便它有一些可以弹出窗口的东西。因为这是它的主要目的;绘制窗口。(如何连接 X 服务器在DISPLAY环境变量中有描述。)

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

您需要阅读 Xvfb 以了解如何启动它和您的 Python 代码,以便它们可以找到彼此。


推荐阅读