通过 Crostini 终端启动 Python IDLE 时出错 tkinter.TclError

Error launching Python IDLE via Crostini Terminal tkinter.TclError

我最近买了一台 Lenovo Duet Chromebook,并开始使用 Linux 终端安装 Python 并使用 IDLE Shell 到 运行 一些基本命令。这在今天之前一直运行良好,但现在 IDLE 无法启动。

如果我从应用程序抽屉启动 IDLE,它会弹出,但会立即关闭。

运行 来自终端,我收到以下错误:

X Error of failed request: BadDrawable (invalid Pixmap or Window parameter) 
  Major opcode of failed request: 55 (X_CreateGC) 
  Resource id in failed request: 0x40004a 
  Serial number of failed request: 1142 
  Current serial number in output stream: 1152

如果我再次尝试启动,我会收到一个略有不同的错误:

    Traceback (most recent call last):
File "/usr/bin/idle", line 5, in <module> main()
File "/usr/lib/python3.9/idlelib/pyshell.py", line 1483, in main root = Tk(className="Idle")
File "/usr/lib/python3.9/tkinter/init.py", line 2270, in init self.tk = _tkinter.create(screenName, baseName, className, interactive, wantobjects, useTk, sync, use)
_tkinter.TclError: couldn't connect to display ":0"

我试过关闭 Linux 并重新打开,然后再次安装软件包。我也尝试过 powerwash,但在安装所有内容后,我仍然遇到相同的错误。

第一个错误来自 X11 客户端库中的调用,XCreateGC(),或者更确切地说,它来自正在处理消息的 Xserver。这就是此类调用出错的原因,真的很少见! (我很想知道是什么原因造成的;这真的不应该发生。如果一开始就很难找出导致问题的原因,修复它就更难了。)

随后的消息是关于无法连接到 Xserver,几乎就像它崩溃了一样。这很奇怪!如果 Xserver 已崩溃,则需要重新启动它才能再次连接到它。这反过来可能需要一些努力来重建会话凭据。 (最简单的方法可能就是重启。)

Tk(因此,通过扩展,tkinter)不讨论在普通 Unix 上呈现到屏幕的其他方式,主要是因为没有人贡献过替代机制。对于一些 Unix 衍生产品,例如 macOS 和 Android,存在这样的替代方案,但据我所知,还没有人完成 Wayland。我可能是错的。

我有几乎相同的错误。 Python 在 Linux 环境(Crostini?)运行 上安装了 3.9.2(常规 deb 包)运行 在具有最新系统的 Asus Chromebook 上安装。 我能够 运行 'regular' X11 应用程序,例如 gimp(xeyes 和 xlogo 也可以),但是 python 的 tkinter 存在问题。 像这样的小程序:

import tkinter
tkinter.Tk()

按预期显示空 window,但更复杂的 tkinter 应用程序失败。 运行 IDLE 产生:

wintermute@penguin:~$ idle
Traceback (most recent call last):
  File "/usr/bin/idle", line 5, in <module>
    main()
  File "/usr/lib/python3.9/idlelib/pyshell.py", line 1483, in main
    root = Tk(className="Idle")
  File "/usr/lib/python3.9/tkinter/__init__.py", line 2270, in __init__
    self.tk = _tkinter.create(screenName, baseName, className, interactive, wantobjects, useTk, sync, use)
_tkinter.TclError: couldn't connect to display ":0"
wintermute@penguin:~$ 

问题已通过 Chrome 操作系统更新得到解决,详情请参见:https://bugs.chromium.org/p/chromium/issues/detail?id=1314921