我该如何在 Odoo 上保存由 'matplotlib.pyplot' 制作的图形?

How shall I save a figure which is made by 'matplotlib.pyplot' on Odoo?

在 .py 文件中:

将 matplotlib.pyplot 导入为 plt

....

图片=fields.Binary(‘图片’)

....

x=[1,2,3,4]

y=[4,7,9,8]

plt.plot(x,y)

现在我想让“Pic”在.py文件中显示“plt.plot(x,y)”做的图形,怎么办?

另外,如果通过python代码让“Pic”显示保存在“/home/user/pic.png”中的图片呢?

----------------------------根据 Trần Khải Hoàng 的建议更新-------- ----------------------------------

.py代码:

 @api.multi
 def plotfig(self,cr):
   x=[1,2,3,4]
   y=[4,7,9,8]
   plt.plot(x,y)
   tem='/tmp/%s.png' % cr['uid']
   plt.savefig(tem)
   pic_data=open(tem,'rb').read()
   self.write({'Pic':base64.encodestring(pic_data)})
   os.remove(tem)

现在当用户创建记录并点击按钮"plotfig"时,"Pic"上会显示一个数字;直到现在所有接缝都可以(另外,我该如何通过代码确定"Fig"的大小);

但如果用户创建另一条记录并再次单击按钮 "plotfig",he/she 将收到警告:"RuntimeError: main thread is not in main loop";有时警告是 "Fatal Python error: GC object already tracked Aborted" / "Segmentation fault" 并且 Odoo 服务器将自动关闭。

如果我点击"Ctrl+c"停止Odoo服务器,我也会收到警告:"RuntimeError: main thread is not in main loop";

我不知道如何解决这些问题。

你必须:

  1. 将绘图保存到文件图像
  2. 读取文件并保存在 Odoo 二进制字段

import matplotlib.pyplot as plt
x=[1,2,3,4]
y=[4,7,9,8]
plt.plot(x,y)
plt.savefig('/home/user/pic.png')
pic_data = open('/home/user/pic.png','rb').read()
self.write({'Pic':base64.encodestring(pic_data )})