我无法在python

时间:2018-07-27 04:51:26

标签: python python-3.x matplotlib

我是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。有人知道为什么以及如何解决这个问题吗?谢谢。

1 个答案:

答案 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”。我通过

安装软件包 pyqt5
pip install pyqt5==5.10.1

请注意, pyqt5版本必须为5.10.1。最新的(5.11.2)会导致另一个错误。有关详细信息,请阅读the webpage