如何停用'警告:尝试删除时未找到源ID 510 - GLib.source_remove(self._idle_event_id)'?

Mar*_*oma 7 python gtk glib matplotlib

当我执行

#!/usr/bin/env python

import matplotlib.pyplot as plt

plt.plot([1, 2, 3, 4])
plt.show()
Run Code Online (Sandbox Code Playgroud)

(以及更复杂的例子)我得到了

/usr/local/lib/python3.4/dist-packages/
matplotlib/backends/backend_gtk3.py:215: Warning: 
Source ID 7 was not found when attempting to remove it
    GLib.source_remove(self._idle_event_id)
Run Code Online (Sandbox Code Playgroud)

是什么导致这种情况,我怎么能摆脱这些警告?

我知道我可以用

import warnings
warnings.simplefilter("ignore")
Run Code Online (Sandbox Code Playgroud)

摆脱所有警告,但这不是我要求的.我想要警告,但没有来自matplotlib(特别是上面的那个).

ely*_*ya5 8

GLib.source_remove没有成功,因为self.close_event()之前执行的可能已经完成了工作.

此提交应该可以解决您的问题.它是从2月23日开始的.您可以等待下一个版本或手动应用修补程序.


use*_*279 7

使用plt.close()来解决这个问题。


Jef*_*let 6

很抱歉提前回答了一个老问题,但我在安装 Python 3.6.9 并matplotlib通过pip运行 Linux 发行版的机器上遇到了类似的问题。我的目的是能够重新运行pyplot在所述机器上升级 Python 后涉及的旧脚本。虽然脚本一直运行到完成并提供了预期的输出,但我总是收到以下警告:

/home/jefgrailet/.local/lib/python3.6/site-packages/matplotlib/backends/backend_gtk3.py:195: Warning: Source ID 8 was not found when attempting to remove it
  GLib.source_remove(self._idle_draw_id)
Run Code Online (Sandbox Code Playgroud)

在使用savefig()方法时pyplot(我想该方法也会发生类似的问题show())。警告中提到的行对应于在backend_gtk3.py以下位置找到的此方法:

def destroy(self):
    #Gtk.DrawingArea.destroy(self)
    self.close_event()
    if self._idle_draw_id != 0:
        GLib.source_remove(self._idle_draw_id)
Run Code Online (Sandbox Code Playgroud)

我查看了matplotlib GitHub以检查是否有相同脚本的更新版本或是否已知此问题,结果发现上述方法的当前实现仅依赖于self.close_event()指令,即GLib.source_remove()没有必要。

因此,我注释了上面代码中的最后两行并保存了更改。进行此编辑后,我可以运行我的脚本而不会收到任何警告。我希望这会帮助遇到类似问题的人。

  • 你是对的,我在使用“pyplot”中的“savefig”时遇到了同样的问题。然而,“show”方法并没有产生这个错误。只有“savefig”方法做到了。不确定是否已经针对此错误实施了良好的解决方案(而不是必须破解这些库的源代码)? (2认同)