【问题标题】:Tkinter setup on headless server无头服务器上的 Tkinter 设置
【发布时间】:2018-08-02 03:16:57
【问题描述】:

我编写了一个带有 Tkinter GUI 的 Python 应用程序,后来添加了一些 CLI 功能,以便在没有 GUI 的情况下在无头服务器 (Ubuntu Server 16.04) 上使用它。

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

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

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

注意:这个应用程序也使用 Matplotlib 生成图表,但37604289 中提出的解决方案会处理这部分。

【问题讨论】:

    标签: python tkinter ubuntu-server


    【解决方案1】:

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

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

    【讨论】:

      【解决方案2】:

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

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

      【讨论】:

        猜你喜欢
        • 2017-10-07
        • 1970-01-01
        • 1970-01-01
        • 2016-12-02
        • 2020-03-29
        • 1970-01-01
        • 2021-05-26
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多