我在使用 tkinter 插件时遇到问题。 我在本地系统中使用 ubuntu 12.10 桌面,并安装了 python 2.7 和 3.2 我在 OpenERP 中使用了 tkinter 插件,它在我的本地电脑上运行良好。 但问题是,当在服务器(Ubuntu 12.04 Server)中使用相同的代码时,它不起作用
显示
self.tk = _tkinter.create(screenName, baseName, className, interactive, wantobjects, useTk,sync, use)
TclError: no display name and no $DISPLAY environment variable
我在终端中检查了 python,它也显示错误,这意味着 tkinter 中有问题 我不知道的地方。 我还检查了 tkinter 和 python 版本都很好。 但我在终端中查找 tkinter 时发现了一些不寻常的事情。 在 Local 中它显示位于 python3.2 中的 tkinter 插件, 但在服务器中它不显示 tkinter
我检查了权限也没有问题。 如何使 tkinter 在 Ubuntu 服务器 12.04 中工作
最佳答案
如果能包含完整的回溯和更大的代码摘录就更好了。错误消息意味着 Tkinter 无法找到您的 X 图形环境,这可能意味着您正在 headless 服务器上运行代码,正如 Dominic 指出的那样。 您可以尝试在服务器上安装 X,但如果机器确实是没有用户界面的服务器,则不需要 GUI。
如果您确实需要在执行该代码时显示 GUI,那么它不应该在服务器端运行,或者您需要设置到客户端计算机的 X11 转发。不过,这在 OpenERP 环境中似乎没有多大意义 - 因为它很难以通用方式为所有用户工作。
现在您可能正在使用 matplotlib 来生成图形(您的代码摘录没有显示这一点)?如果是,您可以简单地强制它使用 headless 后端来生成图像,如question中所述。或者这个other question .
尝试在调用渲染代码之前执行以下代码:
import matplotlib
import matplotlib.pyplot
# force headless backend, or set 'backend' to 'Agg'
# in your ~/.matplotlib/matplotlibrc
matplotlib.use('Agg')
# force non-interactive mode, or set 'interactive' to False
# in your ~/.matplotlib/matplotlibrc
matplotlib.pyplot.ioff()
另请参阅以下引用资料:
关于Python Tkinter 与 ubuntu 服务器一起使用时出现问题,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/15061135/