1

我在使用 tkinter 插件时遇到问题。我在本地系统中使用 ubuntu 12.10 桌面并安装了 python 2.7 和 3.2 我在 OpenERP 中使用了 tkinter 插件,它在我的本地电脑上运行良好。但问题是在服务器(Ubuntu 12.04 服务器)中使用相同的代码时它不起作用

表明

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 时发现了一些不寻常的事情。在本地它显示位于 python3.2 中的 tkinter 插件,但在服务器中它不显示 tkinter

我检查了许可也很好。如何使 tkinter 在 Ubuntu 服务器 12.04 中工作

4

2 回答 2

2

包含完整的回溯和更大的代码提取会很好。错误消息意味着 Tkinter 无法找到您的 X 图形环境,这可能意味着您正在无头服务器上运行代码,正如 Dominic 指出的那样。您可以尝试在服务器上安装 X,但如果机器真的是没有用户界面的服务器,则不需要 GUI。

如果您确实需要在执行该代码时显示 GUI,那么它不应该在服务器端运行,或者您需要设置 X11 转发到客户端计算机。不过,这在 OpenERP 环境中似乎没有多大意义——因为它很难以通用的方式为所有用户工作。

现在您可能正在使用 matplotlib 来生成图形(您的代码提取没有显示)?如果是,您可以简单地强制它使用无头后端来生成图像,如this question或this 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()

另请参阅以下参考资料:

于 2013-02-25T09:25:02.813 回答
0

对于那些仍然感兴趣的人,我只是遇到了同样的问题:现有答案几乎是正确的,但顺序很重要:您需要在 pyplot之前调用 matplotlib.use 。

这对我有用:

import matplotlib
# force headless backend, or set 'backend' to 'Agg'
# in your ~/.matplotlib/matplotlibrc
matplotlib.use('Agg')

import matplotlib.pyplot
# force non-interactive mode, or set 'interactive' to False
# in your ~/.matplotlib/matplotlibrc
matplotlib.pyplot.ioff()
于 2013-10-18T17:30:12.650 回答