TypeError 构造函数在wayland 会话matplotlib 中返回NULL

问题描述

尝试运行matplotlib pyplot,并设置后端为gtk3agg或gtk3cairo时,wayland session遇到如下错误。相同的代码在 Xorg 中运行良好,或者使用 Qt 后端

Gdk-Message: 12:41:05.918: Unable to load fleur from the cursor theme
Traceback (most recent call last):
  File "/usr/lib/python3.9/site-packages/matplotlib/backends/backend_gtk3.py",line 40,in <module>
    cursors.MOVE:          Gdk.Cursor.new(Gdk.CursorType.FLEUR),TypeError: constructor returned NULL

论坛上也有类似的讨论和问题,但似乎没有人给出如何解决这个问题的明确答案。

解决方法

好像是matplotlib的一个bug;它使用的是弃用的 API,弃用的主要原因是这种 API 明确不适用于所有类型的图形会话。

他们在这种情况下应该使用的 API 是 Gdk.Cursor.new_from_name(Gdk.Display.get_default(),"move")

除了修补他们的源代码和分发修改后的版本之外,最好的解决方案是在他们的问题跟踪器中创建一个问题。