无头服务器上的Tkinter设置

时间:2018-02-22 10:06:08

标签: python tkinter ubuntu-server

我使用Tkinter GUI编写了一个Python应用程序,后来添加了一些CLI功能,无需GUI即可在无头服务器(Ubuntu Server 16.04)上使用。

为了限制我必须更改的代码,即使在CLI模式下,一些Tkinter设置仍然完成

root = tk.Tk()
canvas = tk.Canvas(root, borderwidth=0)
frame = tk.Frame(canvas)
...

现在如果我按照34584827的建议使用-X ssh到服务器上,它运行正常。但我希望它运行的方式是NodeJs聊天机器人(在同一台服务器上无人值守运行)启动应用程序并使用结果。

这给了我错误:

Traceback (most recent call last):
  File "sim.py", line 60, in <module>
    root = tk.Tk()
  File "/usr/lib/python2.7/lib-tk/Tkinter.py", line 1818, in __init__
    self.tk = _tkinter.create(screenName, baseName, className, interactive, wantobjects, useTk, sync, use)
_tkinter.TclError: no display name and no $DISPLAY environment variable

如果我能做些什么来挽救这种情况?我可以在chatbot中使用的参数,Tkinter的配置......?

注意:此应用程序还使用Matplotlib生成图表,但37604289中提出的解决方案负责处理该部分。

2 个答案:

答案 0 :(得分:0)

  

如果我能做些什么来挽救这种情况呢?

如果在命令行模式下运行,您唯一可以做的就是修改代码以不初始化tkinter。您可以添加选项,也可以捕获实例化Tk时抛出的异常。

答案 1 :(得分:0)

我遇到了类似的问题,经过几乎一整天的搜索和测试后,此解决方案 https://stackoverflow.com/a/48237220 非常适合我。

我们需要在无头服务器上安装和配置带有虚拟屏幕的 X 窗口,然后运行我们的 python 脚本来启动 tkinter。这样就不用修改代码了,嗯。