如何在Odoo上保存由'matplotlib.pyplot'制作的数字?

时间:2016-08-23 03:37:48

标签: openerp matplotlib-basemap

在.py文件中:

将matplotlib.pyplot导入为plt

...

PIC = fields.Binary(“图片”)

...

X = [1,2,3,4]

Y = [4,7,9,8]

plt.plot(X,Y)

现在我希望“Pic”在.py文件上显示“plt.plot(x,y)”所显示的数字,我该怎么办?

另外,如果用“Pic”来显示python代码保存在“/home/user/pic.png”中的图片怎么办?

-----------------------------根据TrầnKhảiHoà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”上;所有接缝现在还好(另外,如何通过代码决定“图”的大小);

但如果用户再次创建另一条记录并再次单击“plotfig”按钮,他/她将收到警告:“RuntimeError:主线程不在主循环中”;有时警告是“致命的Python错误:GC对象已经被跟踪中止”/“分段错误”,Odoo服务器将自动关闭。

如果我点击“Ctrl + c”来停止Odoo服务器,我也会收到警告:“RuntimeError:主线程不在主循环中”;

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

1 个答案:

答案 0 :(得分:0)

你必须:

  1. 将图表保存到文件图像
  2. 读取文件并保存在Odoo二进制字段
  3. 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 )})