2016-08-23 3 views
0

в .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: основной поток не находится в основном цикле»;

Я не знаю, как решить эти проблемы.

ответ

0

Вы должны:

  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)}) 
+0

спасибо очень много; Я тестировал коды, и именно это я запросил точно; но я все еще нахожу некоторые небольшие ошибки, которые я показываю, обновляя этот вопрос. – vx2008

+0

Привет, попробуйте использовать временный файл для создания нового файла изображения: 'pic_file_name = tempfile.NamedTemporaryFile (delete = False, suffix = '.png')' –

+0

ОК, благодарю вас за вашу поддержку; В эти дни я решил эту проблему, добавив ниже коды: import matplotlib; matplotlib.use ('Agg'); еще раз спасибо! – vx2008