python - 在 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
我已经搜索过这个问题,但大多数解决方案是使用Agg
in matplotlib.use()
,但我尝试过它并不起作用。
测试.py
import Tkinter
r = Tkinter.Tk()
r.tk.eval("source test.tcl")
测试.tcl
puts "hello py"
是什么导致了这个问题,我将如何解决这个问题?谢谢!
解决方案
Tk 和 Tkinter需要Linux 上的 X 服务器(通常称为“显示器”),以便它有一些可以弹出窗口的东西。因为这是它的主要目的;绘制窗口。(如何连接 X 服务器在DISPLAY
环境变量中有描述。)
服务器通常没有显示器。如果您需要,请使用 Xvfb 程序(它创建一个虚拟帧缓冲区,一种合成显示),只要您实际上不需要与脚本创建的窗口进行交互,它就可以正常工作。如果您确实需要与窗口交互,则必须找到一种方法让它们显示在其他地方。这可能是通过使用带有 ssh 的 X 转发,或以某种方式使用 VNC 连接,或者……嗯,有很多选择。如果要在服务器上运行,建议您不要编写需要用户交互的代码。这是可以做到的,但它非常棘手,应该在不必要的地方避免。
您需要阅读 Xvfb 以了解如何启动它和您的 Python 代码,以便它们可以找到彼此。
推荐阅读
- winforms - 如何更改 TabPage 上文本的颜色?
- python - pymssql - 连接每个数据库插入
- java - 基于嵌套数组查询弹性搜索聚合
- sapui5 - 数据绑定到表错误不是功能
- git - 无法从代理下 git clone 项目
- flutter - 构建 Bloc 和 StreamControllers 来处理事件
- django - 使用 kubernetes 在 GCP 上部署 django
- testing - Percy 视觉回归测试 - 首次运行
- javascript - 使用 jquery 和 javascript 更新选择框
- python-3.x - Python3 中的 locals() 内置方法返回全局命名空间中的变量