我该如何在 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";
我不知道如何解决这些问题。
你必须:
- 将绘图保存到文件图像
- 读取文件并保存在 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 )})
在 .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";
我不知道如何解决这些问题。
你必须:
- 将绘图保存到文件图像
- 读取文件并保存在 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 )})