в .py файле:Как сохранить фигуру, сделанную «matplotlib.pyplot» на Odoo?
импорт matplotlib.pyplot как PLT
....
Pic = fields.Binary («Picture»)
....
х = [1,2,3,4]
у = [4,7,9,8]
plt.plot (х, у)
Теперь я хочу « Pic ", чтобы показать фигуру, сделанную« plt.plot (x, y) »на .py файле, как я должен?
в добавлении, что делать, если сделать «Pic», чтобы показать изображение, сохраненное в «/home/user/pic.png» кодом python?
----------------------------- обновление согласно совету 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»; все швы до сих пор (кроме того, как я могу определить размер «Рис» по кодам);
, но если пользователь создаст другую запись и снова нажмет кнопку «plotfig», он/она получит предупреждение: «RuntimeError: основной поток не находится в основном цикле»; когда-то это предупреждение «Fatal Python error: объект GC уже отслеживается Aborted»/«Ошибка сегментации», и сервер Odoo автоматически отключится.
Если я нажму «Ctrl + c», чтобы остановить сервер Odoo, я также получу предупреждение: «RuntimeError: основной поток не находится в основном цикле»;
Я не знаю, как решить эти проблемы.
спасибо очень много; Я тестировал коды, и именно это я запросил точно; но я все еще нахожу некоторые небольшие ошибки, которые я показываю, обновляя этот вопрос. – vx2008
Привет, попробуйте использовать временный файл для создания нового файла изображения: 'pic_file_name = tempfile.NamedTemporaryFile (delete = False, suffix = '.png')' –
ОК, благодарю вас за вашу поддержку; В эти дни я решил эту проблему, добавив ниже коды: import matplotlib; matplotlib.use ('Agg'); еще раз спасибо! – vx2008