2016-08-23 4 views
0

:PLT「matplotlib.pyplot」によって作成されたFigureをOdooに保存するにはどうすればよいですか? .pyファイルに

として

輸入matplotlib.pyplot ...。

Pic = fields.Binary( 'Picture')

...。

X = [1,2,3,4]

Y = [4,7,9,8]

plt.plot(x、y)を

今「が欲しいですPic "で" plt.plot(x、y) "が.pyファイルに作成した図形を表示するにはどうすればよいですか?

追加で、 "/home/user/pic.png"に保存された画像をpythonコードで表示するにはどうすればいいですか?

-----------------------------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"ボタンをクリックすると、Figureが "Pic"に表示されます。すべての縫い目は今まではOKです(さらに、コードによって "Fig"のサイズをどのように決める必要がありますか)。

ユーザが別のレコードを作成して "plotfig"ボタンを再度クリックすると、警告メッセージが表示されます: "RuntimeError:メインスレッドはメインループにありません"; 「致命的なPythonエラー:GCオブジェクトは既に異常終了しました」/「セグメンテーション・フォールト」という警告が表示され、Odooサーバーが自動的にシャットダウンします。

「Ctrl + c」をクリックしてOdooサーバーを停止すると、「RuntimeError:メインスレッドがメインループにありません」という警告も表示されます。

これらの問題の解決方法はわかりません。

答えて

0

あなたがする必要があります:

  1. 保存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

    こんにちは、tempfileを使って新しい画像ファイルを作成しようとしています: 'pic_file_name = tempfile.NamedTemporaryFile(delete = False、suffix = '。png')' –

    +0

    よろしくお願いします。最近、私は以下のコードを追加してこの問題を解決しました:import matplotlib; matplotlib.use( 'Agg');ありがとうございました! – vx2008

    関連する問題