【问题标题】:macOS, Tkinter, Python (Macports) gives error "no $DISPLAY environment variable"macOS、Tkinter、Python (Macports) 给出错误“没有 $DISPLAY 环境变量”
【发布时间】:2019-12-15 16:35:56
【问题描述】:

我在 macOS 上使用 Python 获得“无 $DISPLAY 环境变量”。那是 MacPorts python 3.7,而不是本机 python。我想在虚拟环境中使用 MacPorts python,这样我就可以保持我的项目干净。我还必须使用 MacPorts 而不是 Homebrew。

我尝试将 $DISPLAY 值设置为 :0.0 失败,但以下链接无济于事,因为我没有使用 matplotlib,而是在带有显示器的机器上运行 Issue with tkinter, python and seaborn: _tkinter.TclError: no display name and no $DISPLAY environment variable

我从这里了解到 [https://www.python.org/download/mac/tcltk/#built-in-8-6-8] 不再推荐使用 X11,而是使用 Aqua Cocoa Tk。

问题:正确设置此环境变量的诀窍是什么?

我的堆栈是:

macOS 莫哈韦沙漠

安装了以下相关端口的 Macports:

  • py37-tkinter @3.7.4 python/py-tkinter
  • py37-virtualenv @16.7.2 python/py-virtualenv
  • python37 @3.7.4 lang/python37
  • tcl @8.6.9 lang/tcl
  • tk @8.6.9 x11/tk
  • virtualenv_select @0.1 python/virtualenv_select

当我跑步时

import tkinter as tk
tk._test()

我明白了

_tkinter.TclError: no display name and no $DISPLAY environment variable

【问题讨论】:

    标签: python macos tkinter tcl


    【解决方案1】:

    默认情况下,最新版本的 macOS 没有 Xserver,因此您也需要安装一个。 XQuartz 据我所知(即我正在使用它)已经足够了。

    另一种选择是使用使用 Aqua 后端而不是 X11 后端的 Tk 构建。

    【讨论】:

    • ActiveState TCL应该是这样吧?我安装了它,但 Python 仍然给我同样的错误。我需要重建 Python 还是有更简单的方法将其指向 ActiveState?
    【解决方案2】:

    我遇到了同样的问题,一直到电线。无法让 tkinter 在任何类型的图形界面中正常运行,希望在我的 Python 文件中使用 MacPorts 时保持一致,我目前没有使用 matplotlib 做任何事情。

    运行 macOS 10.15.5,我发现问题似乎是我的tk 端口和我的xorg-server 端口没有礼貌地相互通信。我已将前者安装为依赖项;因此,以前的安装默认为x11 变体(与 OP 的端口一样)。

    我不确定如何使 Aqua Cocoa 版本工作,但重新安装 tk 并指定 quartz 变体为我解决了这个问题:

    sudo port install tk +quartz
    

    如果这对你有用,你对tk._test() 的调用应该停止返回你给定的TclError

    希望。

    【讨论】:

    • Tk 可以在 X11 和 Aqua (native) 模式下在 macOS 上构建。两者都受支持。
    猜你喜欢
    • 1970-01-01
    • 2018-06-23
    • 2020-12-14
    • 2019-10-09
    • 2021-07-18
    • 2016-10-02
    • 2013-10-18
    • 2020-10-24
    • 1970-01-01
    相关资源
    最近更新 更多