我是Python的新手(我以前使用过MATLAB),但发现用show()
关闭一些数字后,我无法调用close()
。我的目标是自由关闭图形,然后最后显示其余图。有人可以帮我吗?谢谢。
我的系统:Windows 10上的Python 3.6。matplotlib版本为2.2.2。我通过Eclipse运行代码。
代码如下:
# Original code
import matplotlib.pyplot as plt
figA = plt.figure('aa')
figB = plt.figure('bb')
plt.close('aa')
plt.plot([2,3],[1,1],color='green')
plt.show()
运行它时,在Eclipse控制台中收到以下错误。
回溯(最近通话最近一次):
第26行中的文件“ D:\一个用于测试dionysus \ test_pythonPractice.py的项目” plt.show()
文件253行,显示为“ C:\ Users \ hanlin \ AppData \ Local \ Programs \ Python \ Python36 \ lib \ site-packages \ matplotlib \ pyplot.py” 返回_show(* args,** kw)
文件“ C:\ Users \ hanlin \ AppData \ Local \ Programs \ Python \ Python36 \ lib \ site-packages \ matplotlib \ backend_bases.py”,显示在第208行 cls.mainloop()
文件“ C:\ Users \ hanlin \ AppData \ Local \ Programs \ Python \ Python36 \ lib \ site-packages \ matplotlib \ backends_backend_tk.py”,行1073,在主循环中 Tk.mainloop()
文件“ C:\ Users \ hanlin \ AppData \ Local \ Programs \ Python \ Python36 \ lib \ tkinter__init __。py”在主循环中的第557行 _default_root.tk.mainloop(n)
AttributeError:“ NoneType”对象没有属性“ tk”
但是,如果我将代码更改为以下两个版本之一,则不会出现错误。
# Revised ver.1
import matplotlib.pyplot as plt
figA = plt.figure('aa')
figB = plt.figure('bb')
plt.close('bb')
plt.plot([2,3],[1,1],color='green')
plt.show()
或
# Revised ver.2
import matplotlib.pyplot as plt
figA = plt.figure('aa')
figB = plt.figure('bb')
plt.close('aa')
plt.plot([2,3],[1,1],color='green')
plt.show(block=False)
plt.pause(3)
从修订版1开始,我猜测close()
仅适用于最后添加的图形。如果我们删除上一个数字,则列表中将记录这些数字的“空”元素。但是这个假设违反了修订版2。有人知道为什么以及如何解决这个问题吗?谢谢。
答案 0 :(得分:3)
感谢@ Mr.T和@DavidG,我知道了。现在代码变成
# Revised original code
import matplotlib
matplotlib.use("Qt5Agg")
import matplotlib.pyplot as plt
figA = plt.figure('aa')
figB = plt.figure('bb')
plt.close('aa')
plt.plot([2,3],[1,1],color='green')
plt.show()
罪魁祸首是后端(默认值:“ TkAgg”),我现在将其设置为“ Qt5Agg”。我通过
安装软件包 pyqt5pip install pyqt5==5.10.1
请注意, pyqt5版本必须为5.10.1。最新的(5.11.2)会导致另一个错误。有关详细信息,请阅读the webpage。